メッセージだけでキー入力を拾ってみる
WinAPIを使っての入力の取得は、基本的には
・if( GetAsyncKeyState( vk ) )*1
で大丈夫なんですが、コレが使えないときはどうするか?
という話。
一番よく見かける(?)のは
・WindowのプロシージャでWM_KEYDOWNを確認する
方法。WPARAMを見るだけなのでラクチン。
基本的にはこれで大丈夫なのですが、
環境・ハード・バージョン等諸々の違いにより、たまに妙な値が入ってくることがあります。
具体的には、「VK_PROCESSKEY*2」とか。
この値が来た時は「ImmGetVirtualKey()」や「MapVirtualKey()」を使えば仮想キーを拾えます。*3
ただ、この変換を噛ましてしまうと、本来の「WinAPIを使わない」という目的からそれるので、更に別の方法を調べてみる。
そこで出てくるのが、
・WindowのプロシージャでWM_CHARを確認する
方法。やはりWPARAMを見るだけなのでラクチン。
しかも、TranslateMessage()に解釈された後だからか何故かを知らないが、
WM_KEYDOWNでVK_PROCESSKEYが入っているような状況でも、こちらなら通常の仮想キーコードが取得できます。
後、「Alt」との同時入力の場合は、
上記のメッセージにSYSを付けて、「WM_SYSKEYDOWN」や「WM_SYSCHAR」にして使えば同じ意味合いになるみたい。(未確認(酷))