2010-01-27 68 views
1

我通過調用API掛鉤程序後無限調用

xzxx xzxx xzxx

掛鉤WM_SETFOCUS消息鉤子程序是

extern "C" LRESULT _declspec(dllexport) __stdcall CALLBACK HookCallWndProc(int nCode, WPARAM wParam, LPARAM lParam) 
    { 
     if (nCode == HC_ACTION) { 
     CWPSTRUCT* info = (CWPSTRUCT*) lParam; 
     if(info->message == WM_SETFOCUS) 
     { 
      if(info->hwnd == hControl) 
      { 
       MessageBox(NULL,L"Focus on control",L"Focus",MB_OK); 
       } 
     } 
     } 
     return CallNextHookEx(hhookCallWndProc , nCode, wParam, lParam); 
    } 

現在當我專注於控件時,這個鉤子程序被調用。顯示MessageBox。但是一旦我點擊確定,就會彈出另一條消息。

消息不斷彈出。 每當我專注於控制時,我只想獲得一次messagebox,但在這裏我無限地收到消息。

我做錯了什麼。

+0

是啊看起來像消息框引起的問題。 我刪除了消息框並打印了調試語句,我的鉤子程序調用了4,5次,直到鍵盤集中控制。 – anand 2010-01-27 05:50:46

回答

4

快速猜測 - 不關閉消息框強制重新控制的焦點,因此再次調用你的函數?

+0

+1我認爲這是問題所在。 – gyurisc 2010-01-27 05:49:29

2

我認爲問題在於用消息框取消焦點,當點擊確定時,將焦點返回給控件,因此您的鉤子會再次被調用。我建議嘗試使用OutputDebugString打印出某些內容,而不是使用消息框。

0

每當調試您的應用程序時最好創建日誌文件以保存信息。 您已評論鍵盤事件被追蹤了四次以上。

  • 這主要取決於在哪裏使用SetWindowsHookEx()函數。
  • 您可以通過正確卸載掛鉤功能來消除此問題。