2

DirectInput アプリケーションにテキストを挿入する必要があります。SendInput を使用していますが、直接入力では仮想キー コードを使用できないため、Unicode を使用する必要があります。今、注入したくないキーは仮想キー コードとしてファイルに登録されており、リアルタイムで Unicode に変換する必要があります。

return1 = ToUnicode(vk, MapVirtualKey(vk, MAPVK_VK_TO_VSC), NULL, buffer, 1, 0);

これは私のコード文字列です。vk は int の仮想キーで、buffer はwchar_t配列の大きな 1 単位です。ToUnicodeでは機能しなかったため、単純なwchar_tだけでは使用できませんでした。ただし、この関数は毎回 0 を返すだけなので、関数がキーを変換できなかったことを意味します。記録のために、「wasd」などの標準のキーを使用していますが、特殊文字は使用していません。誰かがなぜこれが起こるのかを理解できるなら、私は本当に助けが欲しい.

ご検討ありがとうございます!

編集:また、私の怠惰と戦い、古いスイッチとブレークを記述して値を変換すると便利でしょうか? 例えば。

wchar_t unicode;
switch (vk)
case '0x30':
    unicode = '48';
    //ecc...
4

1 に答える 1

0

「キー」配列はオプションであると言われていますが、キーを渡さない限り、結果もゼロになります。多分彼らはあなたがそれを機能させるかどうかのオプションを持っていることを意味していますか?

std::vector<BYTE> keys(256, 0);
int sc = MapVirtualKey(vk, MAPVK_VK_TO_VSC);
return1 = ToUnicode(vk, sc, keys.data(), buffer, 1, 0);

それを試してみてください (または、C++11 を使用していない場合&keys[0]の代わりに)。keys.data()

于 2014-08-06T02:00:05.597 に答える