FindWindow, FindWindowEx, WindowFromPoint

Posted by 겨울에
2011. 9. 26. 10:42 scrap/ C/C++
출처 : http://blog.naver.com/nawoo?Redirect=Log&logNo=80103648279


윈도우 찾기

 

윈도우 간의 상호작용을 위해서는 우선 윈도우의 핸들을 알아야지 윈도우 관련 함수들을 사용할 수 있다.

 

원하는 윈도우의 핸들을 조사하는 기본적인 함수는 FindWindow이다.

 

 

1. FindWindow

 

HWND FindWindow(     

    LPCTSTR lpClassName,      //조사할 윈도우의 클래스 이름
    LPCTSTR lpWindowName      //조사할 윈도우의 캡션
);

 

조건에 맞는 윈도우를 찾으면 윈도우의 핸들을 리턴해 주고 못찾을경우 NULL을 리턴해준다.

 

 

ex)

HWND h1 = FindWindow(NULL, L"NateOn");

HWND h2 = FindWindow(L"My_Class", NULL);

 

 

2. FindWindowEx

 

HWND FindWindowEx(      

    HWND hwndParent,      //hwndParent에 속한 차일드 윈도우를 검색해낸다. NULL이면 데스크탑 윈도우의 차일드를 검색한다.
    HWND hwndChildAfter,  //검색을 시작할 차일드 윈도우를 지정한다. NULL이면 첫번째 차일드부터 검색한다.
    LPCTSTR lpszClass,    //조사할 윈도우의 클래스 이름
    LPCTSTR lpszWindow    //조사할 윈도우의 캡션
);

 

 

ex)

HWND h1 = FindWindowEx(hWnd, NULL, NULL, L"에디트");

 

결과 : 메인 윈도우 아래 캡션이 "에디트"라는 컨트롤이 존재할 경우 그 컨트롤의 윈도우 핸들을 반환해준다.

 

 

3. WindowFromPoint

 

HWND WindowFromPoint(      

    POINT Point
);

 

: 화면 좌표로 윈도우를 검색하는 함수로 인수로 화면 좌표를 POINT형으로 넣어주면 된다.

 

: 조건에 맞는 윈도우를 찾으면 윈도우의 핸들을 리턴해 주고 못찾을경우 NULL을 리턴해준다.

 

ex)

POINT pt;

GetCursorPos(&pt);
HWND h2 = WindowFromPoint(pt);

 

결과 : 마우스의 스크린좌표를 가져오는 GetCursorPos 함수로 마우스 좌표를 얻고 그 좌표를 인수로 넘겨주었다.

마우스 아래 있는 윈도우의 핸들을 가져오게 된다.

 

* 스파이 같은 윈도우의 속성을 조사하는 유틸리티나 드래그 & 드랍시 드랍 윈도우를 조사할 때 등 여러모로 쓸모가 많다.

 

 

 

 

부모 윈도우의 차일드 윈도우를 조사하는 함수 ( 나중에 사용할 일 있으면 다시 정리)

 

4. ChildWindowFromPoint

 

HWND ChildWindowFromPoint(      
    HWND hWndParent,
    POINT Point
);

 

5. ChildWindowFromPointEx

HWND ChildWindowFromPointEx(      

    HWND hwndParent,
    POINT pt,
    UINT uFlags
);


 
blog : 블로그