SetWindowsHookEx
すべてのキーストロークを取得するためにGlobal Hooks を使用してみました。
問題は、グローバル フックと Raw Input を同時に使用できないことです。
Raw Inputs を有効にすると Global Hooks が自動的に無効になるため、ここに何らかの問題があるに違いないと考えています。
SetWindowsHookEx
すべてのキーストロークを取得するためにGlobal Hooks を使用してみました。
問題は、グローバル フックと Raw Input を同時に使用できないことです。
Raw Inputs を有効にすると Global Hooks が自動的に無効になるため、ここに何らかの問題があるに違いないと考えています。
一緒に使う必要があると誰が言ったのですか?アプリケーションが未加工の入力を処理するように登録されている場合、グローバル フックをインストールする理由はまったくありません。生の入力モデルの要点は、アプリケーションがコンピューターに接続された任意の HID からの生の入力の通知を受け取り、処理することです。
むしろ、関数を呼び出して登録した任意の HID のアプリケーションのメッセージ キューに送信されるWM_INPUT
メッセージをリッスンします。このメッセージを受信したら、アプリケーションはメッセージのパラメーターに含まれるハンドルを使用して関数を呼び出す必要があります。サンプルコードはこちらから入手できます。RegisterRawInputDevices
GetRawInputData
RAWINPUT
lParam
WM_INPUT
または、生データのバッファリングされた読み取りを実行できます。これは、一度に大量の入力を生成するデバイスに役立ちます。このアプローチでは、構造体の配列を返すGetRawInputBuffer
関数を呼び出します。RAWINPUT
繰り返しますが、サンプル コードはこちらから入手できます。
Raw Input 関数に関する話題の資料は、MSDN にあります。
LRESULT WindowProcedure コールバックによって既にチェックされている未加工の入力用のフックは必要ありません。デバイスがmouse_pos、mouse_click(およびカウンターで決定できるクリック数)、key_inputなどのように使用された場合、情報を取得する必要があるだけです...