FindWindowEx로 찾지못하는 원도우 핸들구하기
FindWindowEx함수로 찾지못하는 윈도우 핸들이 무지많다
아래함수는 제경험상으로는 95% 이상 핸들을 찾을수있다.
function SubWindowFind( ParentWnd : HWND; FindClassName : string ): HWND;
var
ClassName : array[0..255] of char; FindWnd : HWND;
begin
Result := 0;
if ParentWnd = 0 then Exit;
FindWnd := GetWindow( ParentWnd, GW_CHILD );
while ( FindWnd <> 0 ) do begin
if Boolean( GetClassName( FindWnd, ClassName, 255) ) then
begin
if string(ClassName) = FindClassName then
begin Result := FindWnd;
Break;
end;
end;
FindWnd := GetNextWindow( FindWnd, GW_HWNDNEXT );
end;
end;
* 사용법
procedure FindWin;
var
MainWnd, ChildWnd, FindWnd : HWND;
begin
MainWnd := FindWindow( '클래스이름', nil);
ChildWnd := FindWindowEx( MainWnd, 0, '하위 클래스이름', nil );
FindWnd := FindWindowEx( MainWnd, ChildWnd, '찾고자하는 클래스이름', nil );
end;
일반적으로 위와같이 핸들을구합니다.
근데 위방법으로 안되는경우가 많습니다.
FindWnd := FindWindowEx( MainWnd, ChildWnd, '찾고자하는 클래스이름', nil );
이부분을
while ( ChildWnd <> 0 ) do begin FindWnd := SubWindowFind( ChildWnd, '찾고자하는 클래스이름' );
if FindWnd <> 0 then
Break;
end;
요렇게 고치면 됩니다.
procedure FindWin;
var
MainWnd, ChildWnd, FindWnd : HWND;
begin
MainWnd := FindWindow( '클래스이름', nil);
ChildWnd := FindWindowEx( MainWnd, 0, '하위 클래스이름', nil );
while ( ChildWnd <> 0 ) do begin
FindWnd := SubWindowFind( ChildWnd, '찾고자하는 클래스이름' );
if FindWnd <> 0 then
Break;
FindWnd := GetNextWindow( FindWnd, GW_HWNDNEXT );
end;
if FindWnd <> 0 then
ShowMessage('핸들 구함..ㅎㅎ');
end;
'Delphi > 프로시저-함수' 카테고리의 다른 글
한글 자음 모음 분리 (0) | 2024.05.10 |
---|---|
HEX 코드를 TColor 값으로 변환하여 반환 (0) | 2024.04.29 |
실행파일 종료시 실행파일 삭제 (0) | 2024.03.11 |
숫자에 콤마 찍어주기 (0) | 2024.03.09 |
윈도우에 폰트 설치/제거 하기 (0) | 2024.03.05 |
댓글