5

同じキーであっても、異なるUSB HIDデバイスからのキーに異なる方法で応答できる必要があるため、 RawInputAPIを使用しています。

私のウィンドウはWM_INPUTメッセージを正しく受信します。RAWKEYBOARD構造を取得して、必要なすべての情報を取得できます。

ここで、これらのUSBデバイスがNumLockを切り替えられないようにします。Raw Input APIでNumLockキーの押下を飲み込めることを期待していますか?

WM_INPUTメッセージの結果を1に設定しようとしましたが、効果がないようです。

(私はこれをC#で書いていますが、これはすべて低レベルのWindows APIであるため、これに答えるのにC#や.NETの知識はおそらく必要ありません。)

編集:そうそう、私はグローバルキーボードフック(SetWindowsHookEx)を使用してNumLockキーを飲み込んでみました。残念ながら、Raw Input APIを初期化するとすぐに、ウィンドウがアクティブな間はグローバルキーボードフックが呼び出されなくなります。Raw Inputのにグローバルフックを設定しようとしましたが、同じ効果があります。

4

3 に答える 3

4

Raw Input APIは、キー押下の飲み込みをサポートしていません。

SetWindowsHookEx さらに、同じプロセス内では相互作用しません。Raw Input APIが初期化されるとすぐに、フックが解除されます。

解決策は、それらを別々のプロセスに配置することです。1つのプロセスSetWindowsHookExは不要なキーを飲み込むために使用でき、別のプロセスはRawInputAPIを使用して通過するキー押下を処理します。次に、両方を実行します。これは私にとってはうまくいきました。

于 2013-05-15T12:44:00.230 に答える
0

上記のように、直接的な可能性はありませんが、低レベルのキーボードフックを組み合わせることで実現できます。

私の場合、バーコードスキャナーからコードをキャッチして、数字とEnterだけにする必要があります。

私の解決策は、RawInputがバーコードスキャナーデバイスからのみすべてのキーをキャプチャし、キーボードフックアップが0〜9の数字とENTERのみをキャプチャし、それをまったく返さないことです。次に、コード内で、次の方法でキーを返す必要があるかどうかを判断しています。

SendKeys.SendWait("{ENTER}");
于 2017-04-21T12:37:15.120 に答える
-2

カーネルキーボードフィルタードライバーを作成するだけで、いくつかのキー押下を「飲み込む」ことができます。したがって、まだその状態にある場合は、DDKが必要になります。

于 2013-05-11T16:07:45.280 に答える