Q&A

  • 델피 고수님들의 답변좀 부탁드리겠습니다 ㅠ_ㅠ
이제 시작하는 델피 신입인데요.
버튼 동작으로 해당 프로세스를 죽이는 프로그램을 작성중입니다.
찾아본 결과로 해당 리스트 박스에 프로세스 목록을 뿌리는데요.
이 리스트 박스에 있는 해당 프로세스를 찾아서 죽이는 방법을 구현해보려 합니다..

일단은 리스트 박스까지 뿌리는 소스는
<!--CodeS-->
procedure Process32List(Slist: TStrings);
var
Process32: TProcessEntry32;
SHandle:   THandle;  // the handle of the Windows object
Next:      BOOL;
begin
Process32.dwSize := SizeOf(TProcessEntry32);
SHandle          := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if Process32First(SHandle, Process32) then
begin
        // 실행화일명과 process object 저장
        Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
   repeat
          Next := Process32Next(SHandle, Process32);
          if Next then
                 Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
        until not Next;
end;
CloseHandle(SHandle);  // closes an open object handle
end;


procedure TForm1.Button1Click(Sender: TObject);
var
        h:HWND;
        i:Integer;
        s:String;
begin
        ListBox1.Items.Clear;
        Process32List(ListBox1.Items);

end;
<!--CodeE-->
여기 까지 리스트박스에 내용을 뿌리구요
다음 동작을 해당 프로세스 리스트값을 찾아서 그 프로세스를 죽이는 방법인데요...

<!--CodeS-->
if ListBox1.ItemIndex < 0 then System.Exit;
        ProcId   := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);
        hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcId);
        if hProcess = NULL then ShowMessage('OpenProcess error !');

TermSucc := TerminateProcess(hProcess, 0);
if TermSucc = FALSE then
         ShowMessage('TerminateProcess error !')
else
         ShowMessage(Format('Process# %x terminated successfully !', [ProcId]));
        ListBox1.Items.Clear;
        Process32List(ListBox1.Items);
end;
<!--CodeE-->
이 소스는 리스트박스 내용 프로세스중 해당 프로세스 선택값만 죽이기 인데염
버튼 두개로 진행하는거라서....
이렇게 보다 버튼 하나로 걍 뿌려서 선택없이 해당 실행 파일 리스트 값만 찾아서
죽일수는 없을까여? ㅜ_ㅜ 헤메고 있는 저에게 오아시스좀 내려주세여 ㅠ_ㅠ
ProcId   := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);
이부분에서 작업을 해야할거 같은데... 어찌 해야 할지를 모르겠어여...
1  COMMENTS
  • Profile
    이정욱 2007.11.24 05:45
    <!--CodeS-->
    procedure Process32List(Slist: TStrings);
    var
    Process32: TProcessEntry32;
    SHandle:   THandle;  // the handle of the Windows object
    Next:      BOOL;
    begin
    Process32.dwSize := SizeOf(TProcessEntry32);
    SHandle          := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if Process32First(SHandle, Process32) then
    begin
            // 실행화일명과 process object 저장
            Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
       repeat
              Next := Process32Next(SHandle, Process32);
              if Next then
                     Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
            until not Next;
    end;
    CloseHandle(SHandle);  // closes an open object handle
    end;

    function GetProcIDFromList(Slist: TStrings; ProcName : String) : DWord
    begin
       Result := -1;
       Result := DWORD(Slist.Objects[Slist.IndexOf(ProcName)]);
    end;
    <!--CodeE-->

    에구.. 게시판에서 곧바로 코딩이라 디버깅 해야 하실수도 있습니다.

    위처럼 하시고

    Process32List 를 한번 호출하신다음에, GetProcIDfromList로 Dword값을 가져와서, 킬~ 하시면 될거 같네요.
    프로세스 이름으로 ProcID만 받아오면 될것 같습니다.^^




    • 최용일
      2007.11.27 03:14
      Zeos하고는 별 상관이 없습니다. UTF8로 인코딩/디코딩해서 사용하시거나 MySQL에 접속후에 'set NA...
    • 김기문
    • 2007.11.26 05:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2007.11.27 23:19
      안녕하세요.. 컴포넌트 이름들을 배열에 스트링으로 넣어두시고 FindComponent 로 찾으시면 사용은 가능...
    • 이정욱
      2007.11.25 16:23
      컴포넌트 이름은 배열로 만들 수 없습니다. 단, 컴포넌트는 배열로 만들거나 사용할 수 있습니다. 예...
    • 왕초보
    • 2007.11.25 04:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2007.11.25 21:26
      ADOConnection 컴포넌트를 올려 놓고, 커넥션 스트링 속성에 cnstr내용을 집어 넣으시면 일단 커넥션 컴포...
    • nilriri™
      2007.11.27 03:47
        Self.EmbeddedWB1.DisabledPopupMenus := self.EmbeddedWB1.DisabledPopupMenus + [rcmDefault...
    • 이현우
    • 2007.11.25 02:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2007.11.26 20:41
      WinInet.pas 유닛에 정의되어있는... function InternetGetCookie;     &nb...
    • 유경민
    • 2007.11.24 04:43
    • 4 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2007.11.24 06:05
      버튼1클릭할때   Frame.WebBrowser1.BringToFront; 버튼2클릭할때   Frame.WebBrow...
    • 유경민
      2007.11.27 05:32
      답변 감사드립니다 ㅠ.ㅠ 그런대도 잘안되요. EmbeddedWB 이걸로 바꿨습니다. 이게 메인소스에요 ...
    • nilriri™
      2007.11.27 18:40
      뭐가 안된다는 거죠? 소스를 보니까 웹브라우져를 바꿔주는 코드가 하나도 없는데... 버튼 클릭이벤...
    • 유경민
      2007.11.28 03:41
      레프트에 넣는게 아니라 메인에 넣는거였군요..
    • Marek
      2007.11.27 10:13
      안녕하세요 화면캡쳐는 PrtSc 또는 Alt+PrtSc을 모두 전역핫키에 등록하여 사용하며 내 어플이 Active하...
    • 이현우
      2007.11.25 03:22
      메시지 후킹이용하세요.. [Print Screen]키 메시지만 후킹해도 원하는 답을 찾으실것 같은데요..
    • 김무승
      2007.11.27 00:16
      [Print Screen]키를 후킹하는 방법은 키를 사용하지 않고 일반 프로그램 캡춰하면 막을 수가 없지 않나...
    • 박진오
    • 2007.11.24 02:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 뚜버기^^v
      2007.11.24 06:29
      http://www.tmssoftware.com/ 여기 같은데요.. ^^
    • 델퐈이~
    • 2007.11.23 23:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Marek
      2007.11.27 09:58
      안녕하세요 아래와 같이 해보세요. <!--CodeS--> uses에  DDEMan을 포함 procedure ...
    • 임지훈
    • 2007.11.23 19:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2007.11.24 05:45
      <!--CodeS--> procedure Process32List(Slist: TStrings); var Process32: TProcessEntry32; SHa...
    • jason
    • 2007.11.23 03:53
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이승철
    • 2007.11.23 01:45
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 델코초
      2007.11.23 02:11
    • 왕초보
      2007.11.23 02:42
    • 델코초
      2007.11.23 03:05
    • 이승철
      2007.11.23 18:57
    • 최용일
      2007.11.23 21:53
    • 이승철
      2007.11.26 19:20
    • nilriri™
      2007.11.24 05:32
      팁/테크 게시판이나 리소스 자료실에 제가 작성한 관련글 있습니다. 참고하세요..^^ <!--CodeS--...
    • 이우석
    • 2007.11.22 17:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김기원
      2007.11.22 19:40
      안녕하세요. 비슷하게 만들어서 테스트 해봤는데 잘 처리됩니다. ^^; 아래 코드대신.... 저장할때 I...
    • 이우석
      2007.11.22 21:29
      매우고맙습니다. 그런데 BMP 파일은 잘됩니다. 그러나 JPG 파일이 읽어지지 않고 똑같은 에러가납니다. ...
    • 이정욱
      2007.11.22 23:45
      비스타에서는 BDE를 사용하시려면 관리자 권한이 있으셔야 할것입니다. 그것 뿐아니라 쓰기가 금지되어있는...
    • dohee kim
      2007.11.27 09:02
      답변 주셔서 감사합니다. 제가 질문을 깔끔하게 못해서 다시 정리하겠습니다. 제가 쓰고 있는 환경은 VIS...
    • 구창민
      2007.11.23 00:45
      안녕하세요... 아래처럼 해보세요.. ...   public     { Public decla...
    • 이정욱
      2007.11.22 23:42
      더블클릭 이벤트에서 Memo1.SelLength := 0; 를 넣어보세요.
    • 하덕진
      2007.11.24 00:17
      확인해보셔도 정말로 냉무 입니다 ^^
    • 이정욱
      2007.11.22 23:49
      IE.Width := 100; IE.Height := 100; 을 추가해보세요 ^^
    • 김기원
    • 2007.11.22 04:06
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2007.11.23 01:07
      안녕하세요.. RichEdit 의 내용을 .rtf 파일로 저장하고 출력하면 안되나요?
    • 김기원
      2007.11.24 19:54
      안녕하세요. DB에 내용을 출력하느라 .rtf 파일로 저장후 출력은 다른 필드와 같이하기 때문에 불가능했...