SetWindowsHookEx()
によって提供される低レベルのキーボード/マウス・フックは、入力が実際のデバイスによって生成されたかアプリケーション・コードによって注入されたかを報告します。
low-level keyboard hookの場合、フックはKBDLLHOOKSTRUCT
構造体へのポインタを提供します。この構造体にはflags
のメンバーがあり、偽入力用のフラグはLLKHF_INJECTED
です。 low-level mouse hookについて
は、フックが偽入力用LLMHF_INJECTED
又はLLMHF_LOWER_IL_INJECTED
フラグのいずれかを含むflags
部材を有するMSLLHOOKSTRUCT
構造体へのポインタを提供します。
いずれのフックでも、入力がフックチェーンの残りの部分、つまり結果としてターゲットウィンドウに渡されるのをブロックするために、ゼロ以外の値を返すことができます。
はタイプ[オプションで、】
hDevice:に
ハンドルをハンドル(an older version of )GetRawInputDeviceInfo()
関数のマニュアルに従って、生の入力APIに関して
、生の入力デバイス。これは、WM_INPUTメッセージのlParam、RAWINPUTHEADERのhDeviceメンバー、またはGetRawInputDeviceListから取得されます。 アプリケーションがSendInputなどを使用して入力データを挿入する場合は、NULLにすることもできます。
:ハイライトされたノートは、ドキュメントの現在のバージョンでは削除されました、私は理由を知りません。
したがって、WM_INPUT
メッセージで報告されたhDevice
は、偽入力の場合はNULLになります。
ただし、Raw Input APIで入力をブロックすることはできません。それでも低レベルのフックが必要です。
あなたの横の質問(生の入力)は、あなたの質問が重複として閉じられていない投稿で議論されていません。それが答えられるようにしたいのであれば(もし他の場所にまだいなければ)、それについてだけ尋ねてみてください。 –
重複した質問への回答は、入力が実数であるかシミュレートされている場合に、 'SetWindowsHookEx()' * do *レポートからの低レベルのキーボード/マウスフックという別の可能性のある検出ルートをカバーしていません。 AFAIK、Raw Input APIは*いません。 –
@Remy - 'GetRawInputDeviceInfo'の古いドキュメントには 'hDevice'の注釈があります:*"生の入力デバイスへのハンドル[...]アプリケーションが入力データを挿入する場合、NULLを指定することもできます。 SendInput。 "*。たとえば、XE2のapiドキュメントでそれを見つけることができます。このノートはドキュメントから削除されましたが、私は理由はわかりませんが、 'GetRawInputDeviceInfo'は通常は違いを伝えるべきです。 –