2

私は現在、コンピューター上でのユーザー アクションを記録する信頼できる優れた方法を研究しています。WH_CBTイベントをグローバルにフックするシンプルなアプリを作成しましたが、今のところ問題なく動作しているようです。WH_CBTアプリケーションが独自のイベント ハンドラーを持ち、CallNextHookEx()それを処理した後に関数を呼び出さない状況について読んだことがあります。そのシナリオでは、システム全体のフックを使用して、そのアプリケーションのイベントを自分で処理できなくなると思います。

アプリケーションでキーストローク イベントをハイジャックする他の (おそらくもっと良い) 方法はありますか? 次のようなプロセスに DLL を手動で挿入することに関連する可能性があります。

  1. プロセスを選択します。
  2. を使用して DLL を注入しますCreateRemoteThreadEx()
  3. DLL はいくつかの winapi 関数をフック (迂回) し、それらからキーストロークやその他のイベントに関する情報を収集します。

その場合、フックGetMessage()またはTranslateMessage()関数で十分でしょうか? メッセージ ループを使用するプロセスは、作成されたウィンドウのイベントを処理するためにこれらの関数を使用する必要があるというのは正しいですか?

4

1 に答える 1

1

低レベルのキーボードフックを使用WH_KEYBOARD_LLするのが最善ですが(すべてをキャプチャするため)、他のより具体的なソリューションが存在します。たとえば、ターゲットとするアプリケーションの親レベルのウィンドウをサブクラス化して、主要な関連ウィンドウメッセージをキャプチャすることで、コードの改ざんやシステム全体のフィルタリングを行うため。

よりグローバルなスコープに戻るとWH_KEYBOARDWH_CALLWNDPROCまたはWH_GETMESSAGEベースのフックを使用してこれを行うこともできます。これは、グローバルまたはスレッドレベルで実行できます。それはすべて、何をどれだけキャプチャしようとしているかによって異なります。

于 2012-02-13T13:42:50.807 に答える