델파이

FindWindow 윈도우핸들, 윈도우 종료, 프로세스ID 구하기

미스터몽키 2011. 1. 23. 13:42

 

 

 

 

// 윈도우핸들을 통한 윈도우 종료************************************

 

var

 

    aHandle : THandle;

 

    PID : Integer;

 

 

 

aHandel := FindWindow ('TfrmMain',nil);                      //첫번째 인자는 클래스명(델파이 제작프로그램)

 

 

 

aHandel := FindWindow('NotePad',nil);                          //메모장등은 프로그램명만 

 

또는

 

aHandel := FindWindow(nil,'제목 없음 - 메모장');            //캡션만

 

또는

 

aHandel := FindWindow('NotePad','제목 없음 - 메모장'); //둘다 알때

 

 

 

 

 

SendMessage(aHandle,WM_CLOSE,0,0);  //해당 윈도우 종료  //(추가) 델파이xe 부터는 Messages 유닛에 WM_CLOSE 상수 있음

 

 

 

//아래는 프로세스ID를 찾는 코딩 *************************************

 

 

  if aHandle <> 0 then

 

  GetWindowThreadProcessId(aHandle, @PID);

 

 

 

 

// 윈도우핸들과 프로세스ID 차이

 

 

 

 

 

 

 

그림처럼  메모장으로 "문서1.txt"  와 "문서2.txt"  파일이 열었을 때 작업관리자의 프로세스 탭에 2개의 프로세스가 실행중인 것이보인다.

이때 PID(프로세스ID)와 핸들도 각각 다르다.

 

그럼 PID(프로세스ID) 와 핸들의 차이는 무엇일까?

 

프로세스ID는 프로세스간의 구분을 위한 중복되지 않는 식별값일 뿐이며 프로세스ID로 직접 프로세스를 제어할 수는 없다.

 

핸들은 프로세스 내에서 해당 객체를 액세스할 때 사용하는 한정직인 값이면 이 핸들을 사용하여 객체를 마음대로 조작할 수 있다.