제가 질문을 제대로 이해했는지는 모르겠으나..
자식윈도우를 찾는다는 것은..
exe 파일에 같이 포함된 class들 끼리의 종적관계에서..
적용되는 것입니다..
한 프로세스가 다른 프로세스를 실행했다고 해도..
FindWindowEx로 연결고리를 찾아낼 수는 없습니다..
Exe의 최상의 Class 부터 다시 검색을 해야지요..
아래는 제가 주어서 사용하는 웹브로우져 주소창 핸들얻어오기 입니다..
FindWindow나 FindWindowEX 사용방법이 익숙하시지 않은 거라면..
참고가 되길 바라겠습니다..
(님의 질문을 읽다 보니 혹시 제가 잘못알고 있는 것인지 헛갈리네요..
From 류..
-------------------------------------------------------------------
Function GetIECaption(hWnd:Integer):String;
Var
SubHandle, i : Integer;
Begin
If hWnd <> 0 then
Begin
SubHandle := FindWindowEx(hWnd, 0, 'WorkerA', nil);
If SubHandle = 0 then SubHandle := FindWindowEx(hWnd, 0, 'WorkerW', nil);
If SubHandle <> 0 then
Begin
SubHandle := FindWindowEx(SubHandle, 0, 'ReBarWindow32', nil);
If SubHandle <> 0 then
Begin
SubHandle := FindWindowEx(SubHandle, 0, 'ComboBoxEx32', nil);
If SubHandle <> 0 then
Begin
SubHandle := FindWindowEx(SubHandle, 0, 'ComboBox', nil);
If SubHandle <> 0 then
Begin
SubHandle := FindWindowEx(SubHandle, 0, 'Edit', nil);
If SubHandle <> 0 then
Begin
i := SendMessage(SubHandle, WM_GETTEXTLENGTH, 0, 0);
SetLength(Result, i);
SendMessage(SubHandle, WM_GETTEXT, i + 1, lParam(PChar(Result)));
End;
End;
End;
End;
End;
End;
End;
노수경 님이 쓰신 글 :
: 아래의 FineWindow... 질문 내용이 두서가 없어서
: 다시 질문 드립니다.
:
: CUSTOMER.EXE 는 LOADER.EXE를 실행 해서 띄우게 되어 있구요
: 얻고자 하는 윈도우 핸들은 CUSTOMER.EXE의 핸들,
: 또는 그 자식의 핸들 인데요
: FindWindow(), 또는 FindWindowEx()를 쓰려면
: 클래스명이나 윈도우 명을 알아내야 되지요?
: 부모의 핸들을 얻고자 다음과 같이 하면 전부 0 이나옵니다.
:
: wH:=FindWindow(nil,'CUSTOMER');
: wH:=FindWindow('CUSTOMER',nil);
: wH:=FindWindow('{Afx:400000:b:13ae:6:37e7}','CUSTOMER');
: wH:=FindWindow('Afx:400000:b:13ae:6:37e7','CUSTOMER');
:
: Customer.exe는 직접 실행이 안되고 Loader.exe를 통해야 됩니다.
: 이를 실행 시킨후 WinSight로 보면 다음과 같이 나옵니다.
: ----
: <>Overlapped 00000964 {Afx:400000:b:13ae:6:37e7} CUSTOMER.EXECUSTOMER.EX (0,0)-(800.600) "Customer"
: ├<>Child 0000096c {#32770:Dialog} CUSTOMER.EXE?.? (0.0)-(764.552)
: │├<>Child 00000FA8 {#32770:Dialog} CUSTOMER.EXE?.? (0.60)-(799.599)
: ││├<>Child 00000FA4 {Edit} CUSTOMER.EXE?.? (101.39)-(196.59)
: ││├<>Child 00000FD4 {Edit} CUSTOMER.EXE?.? (311.39)-(404.59)
: : : : :
: ----
: 위의 WinSight의 정보 중에서 크래스명또는 윈도우명을
: 어떻게 찾아내야 하나요?
:
:
|