본문 바로가기
Delphi/프로시저-함수

FindWindowEx로 찾지못하는 원도우 핸들구하기

by MonoSoft 2024. 3. 23.
728x90
반응형

FindWindowEx로 찾지못하는 원도우 핸들구하기

 

728x90

 

 

 

 

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;

 

 

728x90
반응형

댓글