|
그렇네요. 제 실력이 점점 퇴보하는 건지...ㅠㅠ...
그런데 바로 이 예제는 키보드 메시지만 후킹해서 wParam과 lParam에 있는 값들을 보여주는 것인데도 마우스를 클릭할 때에도 왜 Count값은 증가되어서 화면이 갱신되는 것일까요?
실제 실행해 보면 마우스 메시지도 받는 것 처럼 보입니다. 왜 이런 현상이 나는 건지요?
이걸 막으려면 어떻게 합니까?
전체 예문을 첨부했으며 순수 api예제입니다.
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
char str[MAX_PATH];
RECT rt = {100, 120, 500, 150};
static int Count = 0;
if(nCode < 0)
return CallNextHookEx(hKeyHook, nCode, wParam, lParam);
hdc = GetDC(hWndMain);
wsprintf(str, "nCode = %d, wParam = %u, lParam = %08x, Count = %d",
nCode, wParam, lParam, Count++);
FillRect(hdc, &rt, (HBRUSH)GetStockObject(WHITE_BRUSH));
TextOut(hdc, 100, 120, str, strlen(str));
ReleaseDC(hWndMain, hdc);
return CallNextHookEx(hKeyHook, nCode, wParam, lParam);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
char mes[] = "키보드 훅 테스트 프로그램이단다.";
switch(iMessage)
{
case WM_CREATE:
hKeyHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyHookProc, NULL, GetCurrentThreadId());
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
TextOut(hdc, 100, 100, mes, strlen(mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
UnhookWindowsHookEx(hKeyHook);
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}
|