728x90
반응형
FindWindow
윈도우 핸들 (HWND)을 구하기 위하여 FindWindow() 함수를 많이 이용하게 되는데, 이 함수의 원형은 다음과 같습니다.
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
주로 다음과 같은 형식으로 FindWindow() 함수를 이용합니다.
uses Windows;
var
hwnd: THandle;
begin
// 윈도우 이름으로 메모장 핸들 찾기
hwnd := FindWindow(nil, '제목 없음 - Window 메모장');
// 클래스 이름으로 메모장 핸들 찾기
hwnd := FindWindow('Notepad', nil);
// 여러 개의 메모장에서 특정 윈도우 이름의 메모장 찾기
hwnd := FindWindow('Notepad', 'README.md - Window 메모장');
end;
FindWindow()함수를 이용할 때의 문제는 클래스 이름이 같거나, 윈도우 이름이 같은 윈도우가 여러 개일 경우에는 찾기가 애매하다는 것입니다.
FindWindowEx
FindWindowEx() 함수를 FindWindow() 함수보다 다음의 경우들에서 아주 유용하게 이용할 수 있습니다.
- 특정 윈도우의 특정한 자식 윈도우 찾기
- 경우에 따라서는 EnumWindow() 대체
- 클래스 이름이 같거나, 윈도우 이름이 같은 윈도우에서 특정한 것 찾기에 응용
FindWindowEx() 함수의 원형은 다음과 같습니다.
function FindWindowEx(Parent, Child: HWND; ClassName, WindowName: PChar): HWND; stdcall;
다음은 동일한 대화상자들 중에서 특정한 "static" 텍스트를 갖는 대화상자를 찾는 예제입니다.
uses Windows;
var
hwnd, hwndParent, hwndPrev, hwndStatic: THandle;
strText: string;
begin
Result := false;
hwndParent := 0;
hwndPrev := 0;
while True do
begin
hwnd := FindWindowEx(hwndParent, hwndPrev, '#32770', nil);
if (hwnd = 0) then
break;
hwndStatic := FindWindowEx(hwnd, 0, 'static', 'Target Static Name');
if (hwndStatic > 0) then
begin
Result := True;
break;
end;
hwndPrev := hwnd;
end;
참고자료
- "FindWindowA function (winuser.h)":https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
- "FindWindowExA function (winuser.h)":https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexa
'프로그래밍 > 델파이' 카테고리의 다른 글
[pascal] 16진, 10진 숫자 문자열을 정수형으로 변환하기 (StrToInt) (0) | 2021.09.07 |
---|---|
Lazarus 크로스 컴파일을 통한 Windows 95용 어플 만들기 실패의 기록 (0) | 2021.08.19 |
Delphi XE3 64bit UAC 만들기 (0) | 2016.05.22 |
메모리 관리 툴들의 벤치마크 자료(FastMM, ScaleMM2, TCmalloc, ...) (0) | 2012.12.29 |
IE의 열어본 페이지 목록(History) 가져오기 (0) | 2011.04.12 |