|
WH_GETMESSAGE를 직접 후킹하시는 것보다, 메세지 맵을 만드셔서 하시는 것이 좋으실 것 같습니다. 키보드나 마우스 같은 경우에는 후킹이 꼭 필요하지만, 일반 어플리케이션에서는 WM_NCPAINT에서 후킹이 꼭 필요할 것 같지는 않네요. 후킹을 사용하시면 프로그램을 짤 때, 제약을 해야 하는 부분이 많고 생각을 해야하는 부분이 많아, 메세지 맵으로 처리가 가능하다면 이 방법을 사용하시는 것을 추천해 드리고 싶습니다.
메세지 맵을 만드셔서 하시는 예제를 원하신다면 리플을 달아주세요. 집에 있는줄 알고 찾아보니깐 회사에 있나보네요.
DAK 님이 쓰신 글 :
: 안녕하세요...
: WM_NCPAINT 메세지를 후킹하려고 합니다...
: 그래서..WH_GETMESSAGE 타입에 대해서 hook을 설정했습니다...
: 프로시저에 해당하는 부분은 다음과 같습니다..
:
: LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
: {
: HWND hSend;
: MSG *msg;
:
: if (nCode < 0)
: return CallNextHookEx(hHook, nCode,wParam, lParam);
:
: switch (nCode)
: {
: case HC_ACTION:
: switch (wParam)
: {
: case PM_REMOVE:
: msg = (MSG *)lParam;
: if(msg->message == WM_NCPAINT)
: {
: MessageBox(NULL, "ncpaint", "hehehe", MB_OK);
: }
: break;
:
: case PM_NOREMOVE:
: break;
:
: default:
: break;
: }
: default:
: break;
: }
:
: return CallNextHookEx(hHook, nCode, wParam, lParam);
: }
:
: 그리고 훅은 이렇게 걸었습니다..
: HOOK hHook;
: hHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, NULL, GetCurrentThreadId());
:
: WM_PAINT 메세지도 hooking 되는 것을 확인해 봤고..
: 키보드나 마우스 메시지도 같은 방법으로 잘 되었습니다...
: (같은 방법이라고 한 것은..
: 프로시저에서 if(msg->message == WM_NCPAINT) 이 부분을 해당 메시지로 바꾼 경우입니다...)
: 그런데 WM_NCPAINT는 처리가 안되는군요...
:
: 도움을 부탁드립니다..
: 감사합니다.. 좋은 하루 되세요! ^^
:
|