2

メッセージをSetWindowsHookExwithからWH_KEYBOARD_LL押されたキーの有用な表現に変換する正しい方法は何ですか?

これには、ローカル キーボードのマッピングを理解することが必要になる可能性が高いことは承知しています。(注:簡単にするために、キーが離されたときではなく、キーが押されたときのみを考慮しています)

大まかに言えば、次の 3 つのシナリオがあるようです。

  • 特殊キーが押された (Ctrl/Escape/Shift/Alt)
  • 標準キーが押された ( A-Z0-9など...aA両方とも として読み取られることに注意してくださいA)
  • テンキーやF1-F12

特殊キーは必要に応じて処理でき、便利なルックアップがいくつかあります。System.Windows.Forms.Keys

しかし、(英国英語キーボードで)感嘆符を入力すると、次のように検出されますShift-Down1Shift up

キーボードの「変換」レイヤーを通過した後にコードを取得するには低すぎるレベルでフックしているため (私は信じています)、コードを正しく解釈する方法に興味があります。

なぜ私がこれをしているのかについて。これは、私が作成したメディア プレーヤーに便利なショートカットを提供する方法として始まりました。これは、ゲーム内であっても、どこでも機能します (一部のゲームでは、キー ストロークをインターセプトし、OS への伝播を防止するようです)。アプリを使用している限り(おそらくユーザーのみ)、実際に必要なものは十分にありますが、必要に応じてこれをさらに進める方法について好奇心をそそられます.

4

2 に答える 2

2

言語 (およびデッドキーの使用) によっては、これは非常に複雑になる可能性があります。ToAsciiEx単純な状況では機能しますが、死んだキーや IME が関係している場合、事態は非常に複雑になります。

Michael Kaplan のブログには、キーボード レイアウトと、キーボードレイアウト (キーを文字にマッピングする最も簡単な方法) を作成するためのツールであるKeyboard Layout Creatorについて説明する広範な記事があります。キーボード レイアウト クリエーターは、キーストロークの 1 つのセットが 1 つの文字にマップされる場合に使用されます。このような場合、マッピングを行うことができますが、文字を決定するために複数のキーが必要な場合は、マッピングがやや難しくなります。

日本語、中国語、韓国語などの言語には、キーストロークから文字への単一のマッピングはありません。これらの言語では、インプット メソッド エディタが必要です。これらは通常、テキスト サービス フレームワークを使用します。これは、インプット メソッド エディター (および手書き認識や音声認識などのその他のテキスト サービス) がアプリケーションと通信してキーストロークから文字へのマッピングを決定するために使用する API の広範なセットです。IME を使用したキーストロークから文字へのマッピングはコードによって定義されるため、多くの場合、低レベルのキーボード フックはこのマッピングをまったく実行できません。

于 2013-08-01T00:29:00.983 に答える
1
于 2013-08-01T15:57:14.040 に答える