3

英数字キー以外のすべてを防止するために使用する WinAPI 低レベル キーボード フックを含む ac# アプリケーションを作成しました。

問題は、他のプログラム (ログイン時に開始するプログラム) にもキーボード フック (電卓、ブラウザなどのアプリケーションを開始するため) があることです。これらのプログラムは、フック コールバックに到達する前にこれらのアプリケーションを既に開いているため、アクションを停止する方法はありません。

私のフックが他のフックよりも先に呼び出されるようにする方法はありますか?


編集

混乱を解消するために - 私のアプリケーションは、インストーラーを持たない単一の実行可能ファイルです。オンデマンドで実行されます。

他のフックを引き継ぐことができるようにする必要があります-または、単にフックコールバックを最初に強制的に呼び出す必要があります-他の人がすでにSetWindowsHookExメソッドを呼び出していても。

4

2 に答える 2

1

プログラム的な方法でそれを行う方法には答えませんが、別の角度から考えれば、特定の問題に対する許容できる解決策があるかもしれません...

中古品店に行って安価な USB キーボードを購入し、息子に使わせたくないキーへの接続を切断するのはどうですか? 次に、USB を既存のキーボードの USB ポートに接続し、息子が遊んでいるときにキーボードを邪魔にならないように押し出すことができます。

作業が終わったら、息子のキーボードを外して、あなたのキーボードを元の位置に戻します。

それ以外の場合は、他のフックに渡される前に、キーボード メッセージを取得するためにWH_DEBUGフックをインストールする必要があると思います。

DebugProc 関数

システムは、任意のタイプのフックに関連付けられたフック プロシージャを呼び出す前に、この関数を呼び出します。システムは、呼び出されるフックに関する情報を DebugProc フック プロシージャに渡します。DebugProc フック プロシージャは、情報を調べて、フックの呼び出しを許可するかどうかを決定します。

DebugProc には、wParam で呼び出されるフックのタイプ (この場合は WH_KEYBOARD_LL)が渡され、フック チェーンに渡される実際の WH_KEYBOARD_LL フック情報を含む lParamのDEBUGHOOKINFO構造体が渡されます。

于 2012-08-17T21:43:03.037 に答える
0

インストーラーを使用して編集できませんか

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]

レジストリ値? あなたがやろうとしていることを明示的にやろうとしたことはありません...インストーラーからこれらのキー値を並べ替えることができるかどうかはわかりませんが、これは十分に早くそれをキャッチするはずです...

またはこれらのいずれか: [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce] [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices] [HKEY_LOCAL_MACHINE\Software\Microsoft \Windows\CurrentVersion\RunServicesOnce] [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit]

于 2012-08-17T19:07:46.883 に答える