1

キーボードでキープレスをトリガーしたい。物理キーボード上 - その特定のキーボードをソースとして、すべてのカーネル フィルターを通過する必要があります。そのようなことさえ可能ですか?

DeviceIOCtrl と IOCTL_KEYBOARD_INSERT_DATA を見ましたが、ドキュメントが見つかりません。ドライバーには実装されていないと言う人もいます。別のソースは IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER を使用しようとしていますが、そのようなものには使用できない可能性があるとも言っています

カーネル フィルターを通過する前に、キーボードでキープレスをトリガーする他のオプションはありますか?

なぜ私はこれをしたいのですか? はい、これは XY の質問かもしれませんが、現時点で私が考えることができる唯一の解決策です。特定のキーボードのみからキーをインターセプトしたい。キーストロークのキーボードを教えてくれるがそれをインターセプトできない RawInput があり、インターセプトできるがキーボードを識別できない LowLevel Keyboard フックがあります。さらに悪いことに、RawInputは LowLevel-Hook のに起動するため、キーストロークをインターセプトする前にキーボードを取得することはできません。RawInput の後にトリガーするグローバル フックを使用する魔法のユニコーンの方法がありますが、すべてのエッジ ケースに対処するのは非常に面倒なようです。

私が選んだキーボード ストロークをインターセプトするAPIがあります。基本的に、キーストロークを傍受できるドライバーをインストールしキーボード ID を取得します。しかし、その ID はちょっと恣意的なものであり、整数値を特定のキーボード デバイスに関連付けるために利用できる規則には従いません。たとえば、デバイスを再接続すると変更され、\Device\KeyboardClassX などと相関しません。そのため、ユーザーは、キーボードが再接続されるたびに、またはアプリが開始されるたびに、キーを積極的に押す必要があります。実際に表します。そして、それを避けて、ID の特定のデバイスを自動的に取得したいと考えています。私の考えは、キーボードでキープレス(-コントローラー?)をトリガーし、ドライバーを使用してそれをキャッチし、任意のIDをデバイスと関連付けることでした。

したがって、私の Y に別の X がある場合は、遠慮なく提案してください。私は、RawInput と GlobalHook の Magic Unicorn Way が確実に機能しないようなエッジ ケースをすべて回避したいと考えています。どの主要言語の例でも問題ありません。おそらく、アプリケーションの開始時にボタンを手動で押してキーボードを識別するというUXの不便さを回避する方法はありません...

4

1 に答える 1