'Top 윈도우 핸들'에 해당되는 글 1건

  1. 2007.10.26 Top 윈도우들의 핸들을 알수 없을까?




Top 윈도우들의 핸들을 알수 없을까?


1.요약

프로그램을 하다 보면, 현재 Windows System 에서 돌아가는 상위 윈도우들을 알아야 되는
경우가 있습니다. 어떻게 하면 쉬울까요?


2.본문

일반적으로 생각하기 쉬운 가장 간단한 방법은 Enumerate 입니다. 물론 이 방법이 가장 사용하기
 쉽다고 생각합니다. 하지만, 이런 방법 말고 SendMessageCallback 라는 함수를 사용하면 보다
더 쉽게 윈도우의 핸들을 알 수 있습니다. 함수의 원형은 다음과 같습니다.

BOOL SendMessageCallback( 

     HWND hWnd,                // handle to window 

     UINT Msg,                 // message 

     WPARAM wParam,            // first message parameter 

     LPARAM lParam,            // second message parameter 

     SENDASYNCPROC lpCallBack, // callback function 

     DWORD dwData              // application-defined value 

); 



VOID CALLBACK SendAsyncProc( 

    HWND hwnd,        // handle to destination window 

    UINT uMsg,        // message 

    DWORD dwData,     // application-defined value 

    LRESULT lResult   // result of message processing 

);

이중에서 우리가 살펴봐야 할것은 다섯번째 인자인, lpCallBack 입니다. CALLBACK 함수의
성격대로 윈도우가 알아서 호출해 주는 함수입니다. 그럼 언제 호출해 주는 걸까요? 메카니즘은
아래와 같습니다.

1. SendMessageCallback 로 hWnd 윈도우로 메세지를 보냅니다. 전체 상위 윈도우에게 보내기
위해서 HWND_BROADCAST(-1)을 사용합니다.
2. SendMessageCallback 를 호출한 calling window 측에서는 바로 다음 루틴을 처리할 수
있습니다.
3. hWnd 의 윈도우가 Msg 를 받게 되고, 그 메세지 루틴을 처리한다.
4. 메세지 루틴의 처리가 다 끝나면, Windows System 이 방금 메세지를 처리한 윈도우의 핸들과
처리값을 가지고, calling window의 lpCallback 함수를 호출한다.
5. calling window 측에서는 lpCallback 함수가 호출될때 적당한 작업을 한다.




Posted by 명혀니
,