Q&A

  • [재질문]고마운 김영대님 다시금 부탁드립니다.
주신 소스를 테스트 할 수가 없군요



Help File을 아무리 보아도 UNIT에 있는 TIHELP32라는 UNIT는 존재하지 않구요



또한 PROCEDUR process32list에 있는 선언부에 사용하신 TProcessEntry32



OBJECT도 없어요



부탁드릴께요 다시 연락주세요



혹시 제가 전화를 할 수 있다면 연락처도 좀 가르쳐 주세요



그럼 부탁드립니다.



1  COMMENTS
  • Profile
    김영대 1999.07.15 03:27
    안류진 께서 말씀하시기를...

    > 주신 소스를 테스트 할 수가 없군요

    > Help File을 아무리 보아도 UNIT에 있는 TIHELP32라는 UNIT는 존재하지 않구요

    > 또한 PROCEDUR process32list에 있는 선언부에 사용하신 TProcessEntry32

    > OBJECT도 없어요

    > 부탁드릴께요 다시 연락주세요

    > 혹시 제가 전화를 할 수 있다면 연락처도 좀 가르쳐 주세요

    > 그럼 부탁드립니다.



    Toolhelp32 (Unit TlHelp32.pas) 는 SourceRTLWIN 에 있습니다

    Windows 95 와 Windows NT 에서 프로세스 처리 방법은 다릅니다

    아래를 참고하세요





    기본적으로 Toolhelp32 (Unit TlHelp32) 가 제공됩니다

    Toolhelp32 는 현재 실행중인 프로세스 리스트의 정보를 제공하는데

    현재 실행중인 프로세스의 파일명, 프로세스 ID, 각 쓰레드 ID 등을

    얻을 수 있으며 threadID 를 가지고 EnumThreadWindows() 함수를 사용하시면

    원도우 핸들을 구할 수 있습니다

    반대로 원도우 핸들을 가지고 GetWindowThreadProcessID() 함수를 사용하시면

    프로세스와 쓰레도 ID 를 구할 수 있습니다



    (예제) - 현재 실행된 프로세스중 선택한 프로세스 종료시키기

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls,

    Forms, Dialogs, StdCtrls, TlHelp32;



    type

    TForm1 = class(TForm)

    ListBox1: TListBox;

    B_Search: TButton;

    B_Terminate: TButton;

    procedure B_SearchClick(Sender: TObject);

    procedure B_TerminateClick(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    // kernel32.dll을 사용하여 현재 떠있는 process를 읽어온다

    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.B_SearchClick(Sender: TObject);

    begin

    // 현재 실행중인 process를 검색

    ListBox1.Items.Clear;

    Process32List(ListBox1.Items);

    end;



    procedure TForm1.B_TerminateClick(Sender: TObject);

    var

    hProcess: THandle;

    ProcId: DWORD;

    TermSucc: BOOL;

    begin

    // 현재 실행중인 process를 kill

    if ListBox1.ItemIndex < 0 then System.Exit;

    ProcId := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);

    // 존재하는 process object의 handle을 return한다

    hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcId);

    if hProcess = NULL then

    ShowMessage('OpenProcess error !');

    // 명시한 process를 강제 종료시킨다

    TermSucc := TerminateProcess(hProcess, 0);

    if TermSucc = FALSE then

    ShowMessage('TerminateProcess error !')

    else

    ShowMessage(Format('Process# %x terminated successfully !', [ProcId]));

    end;



    end.







    Windows 95 에서 제공하는 Toolhelp32 (Unit TlHelp32)는 NT 에서 사용할 수

    없습니다

    소문으로는 NT5.0 에 Toolhelp32 를 넣는다고는 하는데...



    NT에서는 두가지 방법으로 프로세스 정보를 구할 수 있습니다

    첫째는 레지스트리의 HKEY_PERFORMANCE_DATA 섹션을 읽는 방법인데

    이것은 동적인 레지스트리라 regedit.exe 로는 볼 수 없고

    그것에 맞는 레지스트리 API 를 사용해서 접근할 수 있습니다

    제가 개인적으로 NT에서 프로세스 관리 프로그램을 만들때 처음에

    이 방법으로 했었는데 정보를 읽는 속도가 너무 느렸습니다

    이 방법보다는 아래 PSAPI.DLL 을 사용하는것을 추천합니다



    두번째 방법은 PSAPI.DLL 을 이용하는 방법입니다

    PSAPI.DLL 는 공식적으로 문서화 되어있지 않으며 PSAPI.DLL 이 시스템

    디렉토리에 없는 NT 버전(서비스팩)도 있습니다



    아래 사이트에 보시면 관련 콤포넌트와 PSAPI.DLL 이 있습니다

    http://www.wilsonc.demon.co.uk/delphi.htm <-- 추천

    http://www.santronics.com



    • 우지훈
    • 1999.05.04 00:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 류재성
      1999.07.15 05:43
      안녕하세요... 저는 DELPHI를 처음 공부하는 학생입니다. DELPHI 4를 설치하고, 간단한 프로그램을 작성...
    • 신인재
      1999.05.04 06:32
      음냐...글쎄요....해보질 않아서 정확히 답변을 드릴 수는 없네요...(일딴 죄송) 한가지 확실한 것은 BD...
    • 김상영
      1999.07.15 10:34
      류재성 께서 말씀하시기를... > 안녕하세요... > 저는 DELPHI를 처음 공부하는 학생입니다. > DELPHI 4...
    • 박혁
    • 1999.07.15 05:10
    • 0 COMMENTS
    • /
    • 0 LIKES
    • rain
      1999.05.04 05:26
      김유호 wrote: > 디베이스 파이일로 윈 98에서 작업한 프로그램을 공유하여 사용하여보고 있는데 랜으로 ...
    • 김종환
    • 1999.07.15 05:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.07.15 06:12
      음냐 전역적으로 사용을 하시려면 delphi.co.kr의 팁모아에 안치봉님이 올리신 전역적 핫키 선언하는 법...
    • 정인철
    • 1999.05.03 23:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.04 02:19
      StringGrid의 OnKeyDown이벤트에서 Key := 0; 로 해버리시면 키가 다 무시됩니다. 단 Key := 0로 해주...
    • 안류진
    • 1999.07.15 02:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.07.15 03:27
      안류진 께서 말씀하시기를... > 주신 소스를 테스트 할 수가 없군요 > Help File을 아무리 보아도 UNIT에...
    • 전철호
      1999.07.15 02:40
      오세웅 께서 말씀하시기를... > 안녕하세요 > 마스크 에디터에 숫자만 입력되도록 하고싶은데요 > 마스...
    • 신호성
      1999.05.01 17:34
      김성희 wrote: > DB는 DBase fo Window를 사용하고요... > 디비의 mname이라는 필드에 내용을 ListBox에 ...
    • 김성희
      1999.05.02 08:54
      > 안녕하세요? > 신호성 입니다. > > Table의 특정 Column을 ListBox에 넣고싶은 거죠? > Column값의 ...
    • 신호성
      1999.05.03 09:31
      > 답변 잘 보았습니다. > 쿼리사용하지않고... 테이블로만할수 없나요? > 제컴이 이상한건지(컴 사양이 ...
    • 김성희
      1999.05.03 22:17
      제 질문에 답변 해주신점 감사드립니다. 그럼, 행복하세요...
    • 안명호
    • 1999.05.03 19:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 안치봉
      1999.05.04 03:08
      안명호 wrote: > 델파이 IDE의 에디터 창의 왼쪽에 생기던 > 거터가 언제부턴가 생기지 않아요.. > 예전...
    • 최선기
    • 1999.07.15 00:24
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 송기원
      1999.07.15 00:32
      var vcode : string; begin with Query1 do Begin close; sql.Clear; sql.a...
    • 최선기
      1999.07.15 01:22
      송기원 께서 말씀하시기를... > var > vcode : string; > begin > with Query1 do Begin > ...
    • 조복기
      1999.07.15 02:12
      안녕하세요..조복기입니다. 요즘에 파라미터 사용에 관해 질문이 상당히 많네요.. 분명 Q&A란을 자세...
    • 배재민
    • 1999.05.03 19:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 배재민
      1999.05.03 19:06
      죄송합니다. 이런 하찮은 질문을 드린 점 죄송하게 생각합니다. stringDate := FormatDateTime('yyyy...
    • 송기원
      1999.07.15 00:33
      Database를 어떤것을 사용하시는지 모르겠는데... Table상에서 이진파일을 저장할 field의 Type을 .. I...
    • 김영대
      1999.07.15 02:01
      안류진 께서 말씀하시기를... > GetMoudleHandle을 이용하여 16비트에서는 검색을 하였는데 > 32비트에서...
    • 배재민
    • 1999.05.03 19:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 배재민
      1999.05.03 19:06
      죄송합니다. 이런 하찮은 질문을 드린 점 죄송하게 생각합니다. stringDate := FormatDateTime('yyyy...
    • 박회연
    • 1999.05.03 18:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • rain
      1999.05.04 05:21
      박회연 wrote: > BDE/ODBC 에 대한 ..... > > Borland Delphi Engin 이 무엇을 하고 어떻게 활용을 해...
    • 심경섭
    • 1999.07.14 23:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 송기원
      1999.07.15 00:23
      Tdatabase -> Tquery, Ttable -> TdataSource -> Data Award component -> user 위와 같은 계층적이 구조...