0
HHOOK WINAPI SetWindowsHookEx(
 __in  int idHook,
 __in  HOOKPROC lpfn,
 __in  HINSTANCE hMod,
 __in  DWORD dwThreadId
);

ドキュメントが言うように、これlpfnはフックプロシージャへのポインタです。フック手順を次のようにします。

keyboardProcessing(.....) {
}

このフック プロシージャを呼び出すにはどうすればよいですか? このフック プロシージャを呼び出しても、どのようにキーストロークを受け取るのでしょうか?

SetWindowsHookExどのように機能し、キーを処理するために実際のプログラマー定義のフック メソッドをどのように呼び出すかを説明してください。

4

1 に答える 1

1

SetWindowsHookEx関数は、一部の Windows イベントのカスタム ハンドラーを登録するために使用されます。MSDN から:

アプリケーション定義のフック プロシージャをフック チェーンにインストールします。フック プロシージャをインストールして、特定の種類のイベントについてシステムを監視します。これらのイベントは、特定のスレッド、または呼び出しスレッドと同じデスクトップ内のすべてのスレッドに関連付けられています。

これは、選択されたフック タイプ (キーボード イベントなど) に対して、Windows が提供されたプロシージャ ( lpfn) を呼び出して、そのタイプのイベントが発生したことを通知することを意味します。たとえば、イベントがアプリケーション ウィンドウに向けられていない場合でも、キーボードからすべてのイベントを取得するために使用できます (マクロ レコーダーを作成することを想像してください)。

このフック プロシージャを呼び出すにはどうすればよいですか?

そのプロシージャを呼び出す必要はありません。呼び出しでそのアドレスを指定するSetWindowsHookExと、必要に応じて Windows が呼び出します。

このフック プロシージャを呼び出したとしても、どのようにキーストロークを受け取るのでしょうか?

フックを登録するとWH_KEYBOARD、Windows はキーボード イベントごとにそのプロシージャを呼び出します。プロシージャ内でCallNextHookExを呼び出すことを忘れない でください。フックは一連のプロシージャであり、それぞれがチェーン内の次のプロシージャを呼び出す責任があります。UnhookWindowsHookExでアプリケーションを終了する前に、最後にフックを解放します。

于 2012-05-23T10:49:49.973 に答える