特殊なキーが押されていることを調べるには
特殊なキーが押されていることを調べてみます。
キーワードは「GetAsyncKeyState()関数」です。
GetAsyncKeyState()関数は与えられたキーが押されているかどうかを調べてくれます。
指定のキーが押されているときは、戻り値の下位ビット0が1になり(=1)
(オフのとき、キーアップ状態)
以前に、この関数を呼び出した後、キーが押されているとき、戻り値の上位ビットが1になります。(<0)
プログラムでは面倒なので、0以下ならということで判断しています。
なお、この関数は面白い事にマウスの状態も調べることができます。
(マウスのボタンが押されているかどうか)
それが、「vbKeyLButton,vbKeyMButton,vbKeyRButton」です。
それぞれ、左ボタン、中央ボタン、右ボタンに対応しています。
今まではイベントを取得して判断していたりしましたが、この関数を使えば
非同期に(好きなときに)マウスが押されているかどうかを判断することができます。
実行中の様子
Private Declare Function GetAsyncKeyState Lib "user32.dll" _
(ByVal vKey As Long) As Integer
Private Sub Form_Load()
Me.Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
If GetAsyncKeyState(vbKeyShift) < 0 Then
Me.Label3(0).Caption = "On"
Me.Label3(0).BackColor = vbRed
Else
Me.Label3(0).Caption = "Off"
Me.Label3(0).BackColor = vbWhite
End If
If GetAsyncKeyState(vbKeyControl) < 0 Then
Me.Label3(1).Caption = "On"
Me.Label3(1).BackColor = vbRed
Else
Me.Label3(1).Caption = "Off"
Me.Label3(1).BackColor = vbWhite
End If
If GetAsyncKeyState(vbKeyMenu) < 0 Then
Me.Label3(2).Caption = "On"
Me.Label3(2).BackColor = vbRed
Else
Me.Label3(2).Caption = "Off"
Me.Label3(2).BackColor = vbWhite
End If
If GetAsyncKeyState(vbKeyCapital) < 0 Then
Me.Label3(3).Caption = "On"
Me.Label3(3).BackColor = vbRed
Else
Me.Label3(3).Caption = "Off"
Me.Label3(3).BackColor = vbWhite
End If
If GetAsyncKeyState(vbKeyLButton) < 0 Then
Me.Label5(0).Caption = "On"
Me.Label5(0).BackColor = vbRed
Else
Me.Label5(0).Caption = "Off"
Me.Label5(0).BackColor = vbWhite
End If
If GetAsyncKeyState(vbKeyMButton) < 0 Then
Me.Label5(1).Caption = "On"
Me.Label5(1).BackColor = vbRed
Else
Me.Label5(1).Caption = "Off"
Me.Label5(1).BackColor = vbWhite
End If
If GetAsyncKeyState(vbKeyRButton) < 0 Then
Me.Label5(2).Caption = "On"
Me.Label5(2).BackColor = vbRed
Else
Me.Label5(2).Caption = "Off"
Me.Label5(2).BackColor = vbWhite
End If
End Sub |
ダウンロード
|