vb.net 怎么知道按下了多个按键

2025-04-10 20:01:11
推荐回答(1个)
回答1:

用API  GetKeyboardState ,判断所有的键里哪些被按下了。

下面的是判断键盘灯的状态

Public Class NativeMethods
    Private Shared keyState() As Byte

     _
    Private Shared Function GetKeyboardState(ByVal keyState() As Byte) As Boolean
    End Function

    Private Shared Sub Update()
    keyState = New Byte(256) {}
    Dim result As Boolean = GetKeyboardState(keyState)
    ' Check for error:
    If result = False Then
        Debug.WriteLine("GetKeyBoardState error: " & Marshal.GetLastWin32Error)
        Throw New Exception("GetKeyBoardState error: " & Marshal.GetLastWin32Error)
    End If
    End Sub

    Public Enum LightState
    Off
    [On]
    End Enum

    ' Example - the keyboard lights...

    Public Shared ReadOnly Property CapsLockState() As LightState
    Get
        Update()
        Dim isOn As Boolean = (keyState(Keys.CapsLock) = 1)
        Return IIf(isOn, LightState.On, LightState.Off)
    End Get
    End Property

    Public Shared ReadOnly Property NumLockState() As LightState
    Get
        Update()
        Dim isOn As Boolean = (keyState(Keys.NumLock) = 1)
        Return IIf(isOn, LightState.On, LightState.Off)
    End Get
    End Property

    Public Shared ReadOnly Property ScrollLockState() As LightState
    Get
        Update()
        Dim isOn As Boolean = (keyState(Keys.Scroll) = 1)
        Return IIf(isOn, LightState.On, LightState.Off)
    End Get
    End Property

End Class