特殊なキーが押されていることを調べるには

特殊なキーが押されていることを調べてみます。
キーワードは「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() '-------キーボード------------ 'Shiftキー 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 'Ctrlキー 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 'Altキー 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 'CapsLockキー 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
ダウンロード