원본 : http://www.debuglab.com/knowledge/topwindow.html
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 함수가 호출될때 적당한 작업을 한다.
3.예제
4.참고
Advanced Windows, MSDN
- 2001.08.19 Smile Seo -
- DLL 에 대해서 알아보자. (0)2007/03/23
- 프로세스의 초기화와 종료 기다리기 (0)2007/03/23
- Top 윈도우들의 핸들을 알수 없을까? (0)2007/03/23
- 친절한 메세지 ( benign message ) (0)2007/03/22
- SendMessage는 어떻게 작동하는가? (0)2007/03/22

수안이의 컴퓨터 연구실



Leave your greetings.