0

すべてのキーが押されないようにする次のメソッドを作成しました。

private IntPtr HookHandler(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam)
{
    if (nCode >= 0)
    {
        ...

        //Return a nonzero value to prevent the system from passing the message to the
        //rest of the hook chain or the target window procedure.
        return (IntPtr)1;
    }

    return NativeMethods.CallNextHookEx(_hookID, nCode, wParam, ref lParam);
}

ただし、上記のコードを実行すると、キーボードの calc キーやメール キーなどのキーが許可されます。

私はデバッグし、コードはreturn (IntPtr)1;行に到達します(そして、どのキーが押されているかを正しく示します)が、それまでに、計算ウィンドウ(またはその他)はすでに開いています。1を返しても遅い。

ここで何か違うことができますか?

4

1 に答える 1

2

まあ、それはうまくいくはずです。通常のルーティングは、WM_KEYDOWN メッセージから、既定のウィンドウ プロシージャによって生成される WM_APPCOMMAND メッセージへです。WM_XBUTTONUP は別のルートですが、可能性は低いです。Spy++ を調べて、異常が発生しているかどうかを確認してください。

また、CallNextHookEx() を適切に呼び出していない別のプロセスがキーをフックしている可能性もあります。TaskMgr.exe の [プロセス] タブでこれに取り組み、プロセスの強制終了を開始します。特に、キーボードにWM_APPCOMMAND コマンド セットに適合しないキーがあり、ギズモを追加するためにそのようなプログラムが必要な場合は、ベンダー提供のシャベルウェアのようなにおいがするものから始めてください。

于 2012-08-15T03:00:15.370 に答える