キーボード入力を検知する「GetAsyncKeyState」

夢の女神戦バージョン1ではキーボードが駄目でした

バージョン1ではキーボード検知が上手く出来ていません。 素早くキーを入力すると止まってしまいます。 これでは使い物にならないのでキーボード入力は対応外と言う事になってしまいました。 一応動くようにしてありますが、マニュアルには「マウス専用」と書きました。

VisualBasicではKeyDownイベントを使用してキー入力を検知します。 これは連続入力には向いておらず、一つ一つ丁寧にキーを押す必要があります。


Windows.API 「GetAsyncKeyState」

GetAsyncKeyStateはキーボードの状態を非同期的に取得するWindows APIです。 これを使用して検知する事にしました。

宣言
Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer

使用例
If GetAsyncKeyState(vbKeyUp) Then
    ' カーソル上キーを押した処理
End If
・・こんな感じです。

あ、GetKeyStateでも良いと思います。これは今のキーの状態が分かります。 たまたまGetAsyncKeyStateを先に知りましたので、GetAsyncKeyStateを使いました。


キーボード使用時の注意点

必要であれば以前の入力情報を消しておきましょう。
GetAsyncKeyState (vbKeyUp) '上キーの場合
・・とか書くと消えます。
最上位ビットや最下位ビットを上手く区別してやれば要らないかも。 上の使用例みたいに手軽に検知する時は以前の入力情報を消してやるほうが良いです。 GetKeyStateだったらしなくて良いのかな。

多重入力を回避しましょう。
KeyDownイベントを検知後その各処理に入って・・ その処理中にKeyDownイベントがまた発生した事があります。 KeyDownイベント中にKeyDownイベントを行うと、たいてい狂うので回避しましょう。 例えばDoEventsでキー入力がまた入ってしまう事があります。 KeyDownイベント先頭で多重入力チェックした方が良いです。 ・・はまりました。