For 〜NEXT などのループ処理の途中で、とあるキーを押すとExit For するようにしたいのですが、処理途中で特定のキーが押されたことを判断するにはどうすればよいのでしょうか?
GetAsyncKeyState API を使う方法があります。
Private Declare Function GetAsyncKeyState _
Lib "user32" (ByVal vKey As Integer) As Short
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Const VK_A As Integer = 65
Do
If GetAsyncKeyState(VK_A) <> 0 Then Exit Do
Loop
MessageBox.Show("Aキーが押されました。")
End Sub
Kozさんありがとうございました。
無事解決しました。キーによって固有の番号があり、それを変更することで、いろいろなキーに対応できるのですね。
使ってみます。
解決したようですが、
時間が掛かると思われる処理内でキーボード状態を
取得するのではなく
時間が掛かる処理を別スレッド化したりタイマーにより
処理の占有時間を減らすなどして
KeyPress、KeyDownイベントなどによりキー押下を判断したほうが
良いと思います。
ツイート | ![]() |