環境:xp, vc6, win32API
GetKeyboardState の様に関数呼び出し時に、何らかのキーが押されているか、まったく
押されていないかを調べる関数は無いでしょうか?
押されているキーの情報は必要ありません。
今は下記の様に実装しています。
BOOL isKeyDown() {
BYTE key[256];
::GetKeyboardState( key );
for ( i=0; i<=0xE2; i++ ) {
if ( key[i] & 0x80 ) return TRUE;
}
return FALSE;
}
この様な動作をする関数を望んでいます。
無いですね。
一般に、GUIでは任意のキーが押されているかどうかを知る必要は、
まったくないと考えられるので、用意されなかったのでしょう。
その代わり、GetKeyState()で指定のキーの状態は取得できます。
んで、想像力がないもんで、さっぱりわからないのですが、
isKeyDown()って、どんな場面で使うのでしょう。
差し支えなかったら、お教えください。
ゲームなのですが、ページ送りやデモ画面からプレイ画面に戻るに『-何かキーを押して
ください-』的なことがやりたかったんです。可能性のあるキーの状態を一つ一つチェッ
クしていくのもスマートではないかなと思ってしまったもので。
DxLibというライブラリで CheckHitKeyAll というのがあるようなので同じような関数が
ないかなと思ったのですが残念です。
仲澤@失業者さん、回答ありがとうございました。
あぁ、ゲームならありえますね(vv;)。
さて、isKeyDown() ですが、0xE2( 直前はAXキーですね、なつかし)
まで、検知しているのは良いのですが、先頭部分が0x00からに
なっています。
最初の方は、「マウスのボタン」に割り当てられているので、
純粋にキーボードだけをとりたい場合は 0x08 あたりからに
すべきかも知れません。わかってやっている場合は
かまいませんけど(vv;)。
最初は何も考えず0~255の範囲でやったのですが、どうも常に最上位ビットが立っている
物があるのか、うまくいかなかったので仮想キーコード表を見てここまででいいかなと
『0xE2』にし、マウスボタンは反応してもいいかなとそのままにしました。
常に最上位ビットが立っている物が中間あたりになくて助かりました。