VisualStudio2008 WindowsXPです。
WM_KEYDOWNやWM_SYSKEYDOWNで、仮想キーコードを知りたいときは、WPARAMを使えばいいのですが、そうすると、ShiftキーやCtrlキーなどで左右の区別ができません。
LPARAM(スキャンコード)とMapVirtualKey関数を使って取得すると、Shiftキーは問題ないのですが、CtrlキーやAltキーなどの拡張キーは左右の区別がされていませんでした。
どうすればShiftキーやCtrlキーなどの左右の区別をすることができますか?
GetAsyncKeyState ではどうでしょう?
編集 削除GetAsyncKeyState関数などは、「その時点で特定のキーを押しているか」を判断する関数なので、例えば「左右同時押し」などの状況では使えないのではないか……と考えております。
編集 削除>WM_KEYDOWNやWM_SYSKEYDOWNで、仮想キーコードを知りたいときは、
>WPARAMを使えばいいのですが、そうすると、ShiftキーやCtrlキーなどで
>左右の区別ができません。
この状態でlParamを見ればよいのでは?
私の環境ではwParam + lParamで普通に判別できましたよ?
>「左右同時押し」などの状況では使えないのではないか……と
>考えております。
そういう後出し条件は想定外だったので参考程度で。
ありがとうございました。解決しました。
編集 削除> 例えば「左右同時押し」
GetAsyncKeyState を左右それぞれについて呼べばいいと思います。
ものすごく厳密に言えば、2回目の呼び出しの時にはもう1回目のキーを離している可能性もありますが、そこまでの精度は必要ないのでは。
GetKeyboardState という、全キーの状態を一度に取得できる関数もありますが、説明が長ったらしくてよくわかりませんし、前述ほどの精度があるかどうかも不明です。