-2

を使用してファイルに書き込むときに小文字を取得しようとしていますが、それができません。次のような記号をgetasynckeystate書き込むことはできません。これは私が使用しているコードです。使用してみましたが、それも機能しません。@$GetKeyStateWM_KEYDOWN

if( GetAsyncKeyState(i) == -32767 )
{
    save(i, "keys.txt");
}

すべてを大文字で保存しており、Shift + 任意の数字キーを使用しようとすると記号が保存されません。

4

1 に答える 1

1

GetAsyncKeyState()多かれ少なかれ物理的なキーストロークで動作します。大文字と小文字は同じキーなので区別できません (つまり、"a" と "A" はキーボードの同じキーです)。大文字と小文字を区別するには、キーボード レイアウトとローカリゼーションと共に、Shift と Caps-Lock を考慮する必要があります。同様の問題が、@ や $ などのいくつかの記号に影響します。レイアウトとロケールの間で大きく異なります。

WM_CHARケース情報やその他のロケール固有のものを取得するには、 と組み合わせて使用​​する必要がありますTranslateMessage()。ただし、Delete や F1-12 などの文字以外のキーには、引き続きWM_KEYDOWNandが必要です。WM_KEYUP詳細については、次の MSDN から入手できます。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646268(v=vs.85).aspx

補足として、技術的にGetAsyncKeyState()間違った戻り値をチェックしています。結果を -32767 と比較するだけでは信頼できない場合があります。戻り値に関するドキュメントから:

最上位ビットが設定されている場合はキーが押されています。最下位ビットが設定されている場合は、GetAsyncKeyState への前回の呼び出しの後にキーが押されました。ただし、この最後の動作に頼るべきではありません。

于 2013-11-08T12:15:33.680 に答える