6

構造を操作する小さなWIN32CアプリケーションがありKBDLLHOOKSTRUCTます。この構造には、押されたキーのVKコードが含まれています。

これをASCII文字に変換しようとしています。このために、私は関数MapVirtualKeyを使用します。これはうまく機能します。

唯一の問題は、1つのVKコードが複数の文字に対応できることです。例:

私のキーボード(スイスドイツ語)にはkey-charがあり.ます。Shift+を押す.と、が作成されます:。VKコードは同じです。それは問題ありません、そして私はまたShift押されているか、またはCaps Lockアクティブにされているかどうかを確認することができます。

私の唯一の問題は:どうすればchar':'を取得できますか?このような関数が必要です:

GetKeyChar(vkCode, shift)

キーボードの「通常」と「シフト」の値を取得するためにこれが必要です。もちろん、これをハードコーディングすることはできますが、この方法で行うのは好きではありません。

4

4 に答える 4

4

問題はKBDLLHOOKSTRUCT、翻訳を行うために必要なすべての情報がにないことです。キーを押すたびにメッセージが表示されます。したがって、Shift + Xの場合、Shiftキーが押されたことを示す入力メッセージと、「X」キーが押されたことを示す別のメッセージが表示されます。

Shift、Alt、Ctrl、および(おそらく他の)キーの状態を取得するには、GetKeyboardStateを呼び出す必要があります。ToAsciiEx次に、またはを呼び出しますToUnicodeEx

于 2011-09-04T13:54:59.520 に答える
2

あなたが探しているのはToUnicode、そのキーを押すことによって生成されたユニコード文字を返すものです。

于 2011-09-04T13:46:59.280 に答える
2

探している関数は、ToAscii、ToAsciiEx、ToUnicode、ToUnicodeExです。

于 2011-09-04T13:47:37.847 に答える
0

short VkKeyScan(char ch)APIにはシフト情報が含まれています。charを仮想キーコードとシフト状態に変換します。

これを参照してください:文字を対応する仮想キーコードに変換します

于 2011-11-09T09:35:28.500 に答える