2009-06-10 8 views
0

私は制御しないダイアログのキーボードフックを追加しました(クローズドソースを持つライブラリで独自のDialogProc関数を実行します)。私はキーストロークをキャプチャすることができますが、キーストロークは常にダイアログに送られます。これにより、エラービープ音や奇妙な動作が発生します。ダイアログへのキーストロークの抑制

フックをインストール:

hKeyHook=SetWindowsHookEx(WH_KEYBOARD, KeyHookProc, hInst, GetCurrentThreadId()); 

フック関数:

UnhookWindowsHookEx(hKeyHook); 

に送信されてからキーストロークを停止する方法があります:

LRESULT CALLBACK KeyHookProc(int code, WPARAM wParam, LPARAM lParam) 
{ 
    if(!(lParam & 0x80000000)) 
    { 
     if(wParam == VK_mykey) 
     { 
      // Do my stuff 

      return 0; // Don't continue the hook chain 
     } 
    } 

    // Continue with next hook 
    return CallNextHookEx(hKeyHook, code, wParam, lParam); 
} 

は、フックを解除ダイアログにフォーカスを持っているコントロールですか?

答えて

3

GWLP_WNDPROCremarks section of this page参照)の値を置き換えることで問題のコントロールをサブクラス化できます。基本的なコンセプトは、WM_KEY*のメッセージを除外し、残りのメッセージを元のWndProcに渡すことです。

0

キーが押されたとき、この

if(!(lParam & 0x80000000)) 

が真です。それがリリースされたら何もを行う。

KeyHookProcは、キーが押されているとき、またはキーが離されたときに呼び出されます。

0

Hmm。最初の点は、ここで独自のプロセススレッドIDを使用したいということです。ダイアログはプロセススレッドの下にありますか?

+0

実際には私のスレッドですが、質問からは分かりません。 –

関連する問題