Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[8110] Re:[질문] 윈도우의 핸들 얻기
류종택 [ryujt] 3683 읽음    2002-05-08 00:24
제가 질문을 제대로 이해했는지는 모르겠으나..

자식윈도우를 찾는다는 것은..
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의 정보 중에서 크래스명또는 윈도우명을
: 어떻게 찾아내야 하나요?
:
:

+ -

관련 글 리스트
8105 [질문] 윈도우의 핸들 얻기 노수경 1682 2002/05/07
8110     Re:[질문] 윈도우의 핸들 얻기 류종택 3683 2002/05/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.