質問

複数のキーボードがあるシステムを使用しており、キーストロークがどのキーボードからのものかを知る必要があります。セットアップを説明すると、次のようになります。

  1. 普通の PC と USB キーボードを持っています
  2. いくつかのハードキーを備えた外部 VGA 画面を持っています
  3. ハード キーは標準の USB キーボードとしてマッピングされ、限られた数のキーコード (F1、F2、Return、+、および -) を送信します。

アプリケーションがフォーカスされていない場合でも入力を処理できる低レベルのフック (C# ですが、実際には Win32 機能を呼び出します) があります。

問題は、通常のキーボードを使用すると、マッピングされたキーコードの一部が外部画面上で駆動されるアプリケーションによって取得されてしまうことです。外部画面によって送信され、確認に使用されるキー入力の 1 つは VK_RETURN です。「デバイス」を特定してフィルタリングできない限り、ユーザーは見ていない画面上でアクションを実行し、それを確認している可能性があります。

どのキーボードがキーを押したのかを知るにはどうすればよいですか?

役に立ちましたか?

解決

はい、私は矯正されて立っていますが、悪いですが、毎日何か新しいことを学んでいます。

それを補う私の試みは次のとおりです:):

  • ::RegisterRawInputDevices() を使用して、生入力に使用するデバイス (2 つのキーボード) を登録します。

  • これらのデバイスは GetRawInputDeviceList() から取得できます。

  • デバイスを登録すると、WM_INPUT メッセージの受信が開始されます。

  • WM_INPUT メッセージの lParam には、入力元のキーボードに加えて、仮想キーコードとメッセージのタイプ (WM_KEYDOWN、WM_KEYUP など) を決定するために使用できる RAWKEYBOARD 構造体が含まれています。

  • したがって、最後のメッセージがどこから来たのかを示すフラグを設定し、それを通常のキーボード入力ハンドラーにディスパッチすることができます。

他のヒント

これを行う方法はありません。Windows はこれを抽象化します。前述したように、デバイス ドライバーを作成または変更する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top