2016-05-24 20 views
1

キーボードアプリケーションまたはマウスイベントが、デスクトップアプリケーションのTeamViewer、Steamまたはその他のリモートデスクトップソフトウェアのようなアプリケーションではなくハードウェアからトリガーされるかどうかを判断する方法はありますかWindowsでは?キーボードイベントまたはマウスイベントがソフトウェアによってトリガーされるかどうかを検出

私の目的は、ボットの予防ではなく、アプリケーションへのリモートアクセスを防ぐことです。

RawInput APIは、SendInput APIを使用して送信された偽のイベントを検出できるようです。それが正しいか?

+0

あなたの横の質問(生の入力)は、あなたの質問が重複として閉じられていない投稿で議論されていません。それが答えられるようにしたいのであれば(もし他の場所にまだいなければ)、それについてだけ尋ねてみてください。 –

+0

重複した質問への回答は、入力が実数であるかシミュレートされている場合に、 'SetWindowsHookEx()' * do *レポートからの低レベルのキーボード/マウスフックという別の可能性のある検出ルートをカバーしていません。 AFAIK、Raw Input APIは*いません。 –

+1

@Remy - 'GetRawInputDeviceInfo'の古いドキュメントには 'hDevice'の注釈があります:*"生の入力デバイスへのハンドル[...]アプリケーションが入力データを挿入する場合、NULLを指定することもできます。 SendInput。 "*。たとえば、XE2のapiドキュメントでそれを見つけることができます。このノートはドキュメントから削除されましたが、私は理由はわかりませんが、 'GetRawInputDeviceInfo'は通常は違いを伝えるべきです。 –

答えて

3

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 ofGetRawInputDeviceInfo()関数のマニュアルに従って、生の入力APIに関して

、生の入力デバイス。これは、WM_INPUTメッセージのlParam、RAWINPUTHEADERのhDeviceメンバー、またはGetRawInputDeviceListから取得されます。 アプリケーションがSendInputなどを使用して入力データを挿入する場合は、NULLにすることもできます。

:ハイライトされたノートは、ドキュメントの現在のバージョンでは削除されました、私は理由を知りません。

したがって、WM_INPUTメッセージで報告されたhDeviceは、偽入力の場合はNULLになります。

ただし、Raw Input APIで入力をブロックすることはできません。それでも低レベルのフックが必要です。

関連する問題