GetAsyncKeyState()
多かれ少なかれ物理的なキーストロークで動作します。大文字と小文字は同じキーなので区別できません (つまり、"a" と "A" はキーボードの同じキーです)。大文字と小文字を区別するには、キーボード レイアウトとローカリゼーションと共に、Shift と Caps-Lock を考慮する必要があります。同様の問題が、@ や $ などのいくつかの記号に影響します。レイアウトとロケールの間で大きく異なります。
WM_CHAR
ケース情報やその他のロケール固有のものを取得するには、 と組み合わせて使用する必要がありますTranslateMessage()
。ただし、Delete や F1-12 などの文字以外のキーには、引き続きWM_KEYDOWN
andが必要です。WM_KEYUP
詳細については、次の MSDN から入手できます。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646268(v=vs.85).aspx
補足として、技術的にGetAsyncKeyState()
間違った戻り値をチェックしています。結果を -32767 と比較するだけでは信頼できない場合があります。戻り値に関するドキュメントから:
最上位ビットが設定されている場合はキーが押されています。最下位ビットが設定されている場合は、GetAsyncKeyState への前回の呼び出しの後にキーが押されました。ただし、この最後の動作に頼るべきではありません。