左右キーを区別するには?

解決


F0  2010-03-13 03:08:39  No: 71474

VisualStudio2008 WindowsXPです。

WM_KEYDOWNやWM_SYSKEYDOWNで、仮想キーコードを知りたいときは、WPARAMを使えばいいのですが、そうすると、ShiftキーやCtrlキーなどで左右の区別ができません。

LPARAM(スキャンコード)とMapVirtualKey関数を使って取得すると、Shiftキーは問題ないのですが、CtrlキーやAltキーなどの拡張キーは左右の区別がされていませんでした。

どうすればShiftキーやCtrlキーなどの左右の区別をすることができますか?


aetos  2010-03-13 04:51:18  No: 71475

GetAsyncKeyState ではどうでしょう?


F0  2010-03-13 05:55:15  No: 71476

GetAsyncKeyState関数などは、「その時点で特定のキーを押しているか」を判断する関数なので、例えば「左右同時押し」などの状況では使えないのではないか……と考えております。


参考程度に  2010-03-13 12:51:11  No: 71477

>WM_KEYDOWNやWM_SYSKEYDOWNで、仮想キーコードを知りたいときは、
>WPARAMを使えばいいのですが、そうすると、ShiftキーやCtrlキーなどで
>左右の区別ができません。

この状態でlParamを見ればよいのでは?
私の環境ではwParam + lParamで普通に判別できましたよ?

>「左右同時押し」などの状況では使えないのではないか……と
>考えております。
そういう後出し条件は想定外だったので参考程度で。


F0  2010-03-13 23:31:44  No: 71478

ありがとうございました。解決しました。


aetos  2010-03-15 21:25:57  No: 71479

> 例えば「左右同時押し」

GetAsyncKeyState を左右それぞれについて呼べばいいと思います。
ものすごく厳密に言えば、2回目の呼び出しの時にはもう1回目のキーを離している可能性もありますが、そこまでの精度は必要ないのでは。

GetKeyboardState という、全キーの状態を一度に取得できる関数もありますが、説明が長ったらしくてよくわかりませんし、前述ほどの精度があるかどうかも不明です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加