同上,在线等

解决方案 »

  1.   

    刚刚做过~
    '-----模块中声明
    Option ExplicitPrivate Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101
    Private Const WM_SYSKEYDOWN = &H104
    Private Const WM_SYSKEYUP = &H105Public Type KBDLLHOOKSTRUCT
        vkCode As Long              ' 虚拟按键码(1--254)
        scanCode As Long            ' 硬件按键扫描码
        flags As Long               ' flags
        time As Long                ' 消息时间戳
        dwExtraInfo As Long         ' 额外信息
    End TypePublic Enum KEYACTION
        ACTION_KEYDOWN = WM_KEYDOWN
        ACTION_KEYUP = WM_KEYUP
        ACTION_SYSKEYDOWN = WM_SYSKEYDOWN
        ACTION_SYSKEYUP = WM_SYSKEYUP
    End Enum' 全局键盘钩子回调函数
    ' 参数: action 标识键盘消息(按下,弹起), keyStruct 包含按键信息
    Public Function KeyboardProc(ByVal action As KEYACTION, keyStruct As KBDLLHOOKSTRUCT) As Boolean
        Select Case action
            Case ACTION_KEYDOWN
                Debug.Print keyStruct.vkCode, "按下键盘按键"
            Case ACTION_KEYUP
                Debug.Print keyStruct.vkCode, "弹起键盘按键"
            Case ACTION_SYSKEYDOWN
            
            Case ACTION_SYSKEYUP
            
        End Select
        
        ' 返回 True 表示继续传递按键消息
        ' 返回 False 表示结束按键消息传递
        KeyboardProc = False
    End Function
    '--窗体中的代码和声明
    Option Explicit
    Private Declare Function StartMaskKey Lib "MaskKey" (lpdwVirtualKey As Long, ByVal nLength As Long, ByVal lpfnKeyboarProc As Long, Optional ByVal bDisableKeyboard As Boolean = False) As Long
    Private Declare Function StopMaskKey Lib "MaskKey" () As LongPrivate Sub cmdStartMask_Click()
        ' 屏蔽 A, B, C, 上, 下, 左, 右及两个win键
        Dim key(10) As Long
        key(0) = vbKeyA
        key(1) = vbKeyB
        key(2) = vbKeyC
        key(3) = vbKeyLeft
        key(4) = vbKeyRight
        key(5) = vbKeyUp
        key(6) = vbKeyDown
        key(7) = &H5B               ' 左边的win键
        key(8) = &H5C               ' 右边的win键
        key(9) = vbKeyD
        key(10) = vbKeyE
        StartMaskKey key(0), UBound(key) + 1, AddressOf KeyboardProc
    End SubPrivate Sub cmdStopMask_Click()
        StopMaskKey
    End Sub