프로세스의 pID를 알고 있다고 가정함.
(CreateProcess를 통해서 프로세스를 실행시켰거나...)
type
TPIDandHWND=record
pID: DWORD;
hWindow: HWND;
end;
// aHWND의 캡션을 반환
function GetWindowText(aHWND: HWND): String;
var iLen: Integer;
begin
iLen:=SendMessage(aHWND, WM_GETTEXTLENGTH, 0, 0);
SetLength(Result, iLen+1);
SendMessage(aHWND, WM_GETTEXT, iLen+1, lParam(PWideChar(Result)));
end;
// 윈도우를 뒤져서 pID, 캡션, 클래스명이 일치하는 윈도우의 핸들 가져오기
function EnumWindowProc(hWindow: HWND; var lParam: TPIDandHWND): Boolean; stdcall;
var
pID: DWORD;
sClassName, sCaption: array [0..MAX_PATH] of WideChar;
begin
GetWindowThreadProcessID(hWindow, @pID);
GetClassName(hWindow, sClassName, MAX_PATH);
StrCopy(sCaption, PWideChar(GetWindowText(hWindow)));
if (lParam.pID=pID) and (sClassName='SciCalc') and (sCaption='계산기') then begin
lParam.hWindow:=hWindow;
Result:=False;
end
else Result:=True;
end;
// 프로세스ID로 윈도우 핸들 가져오기
function WindowFromProcessID(pID: DWORD): HWND;
var lParam: TPIDandHWND;
begin
lParam.pID:=pID;
lParam.hWindow:=0;
EnumWindows(@EnumWindowProc, Integer(@lParam));
Result:=lParam.hWindow;
end;
TPIDandHWND=record
pID: DWORD;
hWindow: HWND;
end;
// aHWND의 캡션을 반환
function GetWindowText(aHWND: HWND): String;
var iLen: Integer;
begin
iLen:=SendMessage(aHWND, WM_GETTEXTLENGTH, 0, 0);
SetLength(Result, iLen+1);
SendMessage(aHWND, WM_GETTEXT, iLen+1, lParam(PWideChar(Result)));
end;
// 윈도우를 뒤져서 pID, 캡션, 클래스명이 일치하는 윈도우의 핸들 가져오기
function EnumWindowProc(hWindow: HWND; var lParam: TPIDandHWND): Boolean; stdcall;
var
pID: DWORD;
sClassName, sCaption: array [0..MAX_PATH] of WideChar;
begin
GetWindowThreadProcessID(hWindow, @pID);
GetClassName(hWindow, sClassName, MAX_PATH);
StrCopy(sCaption, PWideChar(GetWindowText(hWindow)));
if (lParam.pID=pID) and (sClassName='SciCalc') and (sCaption='계산기') then begin
lParam.hWindow:=hWindow;
Result:=False;
end
else Result:=True;
end;
// 프로세스ID로 윈도우 핸들 가져오기
function WindowFromProcessID(pID: DWORD): HWND;
var lParam: TPIDandHWND;
begin
lParam.pID:=pID;
lParam.hWindow:=0;
EnumWindows(@EnumWindowProc, Integer(@lParam));
Result:=lParam.hWindow;
end;
'Delphi' 카테고리의 다른 글
[Delphi] 다른 어플리케이션에 Ctrl+V 보내기 (0) | 2010.04.26 |
---|---|
[Delphi] 프로세스 실행시킨 후 해당 프로세스 종료시 같이 종료하기 (0) | 2010.04.26 |
[Delphi] DLLMain 사용 (0) | 2010.04.22 |
[Delphi] 특정 프로세스 키보드 후킹 (2) | 2010.04.22 |
랜덤 문자열 생성 (0) | 2009.10.10 |