0

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

フックの取り付け:

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

フック機能:

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);
}

フックを解放する:

UnhookWindowsHookEx(hKeyHook);

ダイアログでフォーカスがあるコントロールにキーストロークが送信されないようにする方法はありますか?

4

3 に答える 3

3

GWLP_WNDPROCその(このページの備考セクションを参照) 値を置き換えることにより、問題のコントロールをサブクラス化できます。基本的な概念は、WM_KEY*メッセージをフィルターで除外し、残りを元の WndProc に渡すことです。

于 2009-06-10T16:26:49.313 に答える
0

これ

if(!(lParam & 0x80000000))

キーが押されたときは true です。解放されたら何もしません

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

于 2009-06-10T16:28:42.180 に答える
0

うーん。最初のポイントは、ここで独自のプロセス スレッド ID を使用するかどうかです。ダイアログは間違いなくプロセス スレッドの下にありますか?

于 2009-06-10T16:33:55.620 に答える