我也遇到过,我的方法是屏蔽Num Lock键
有代码要不要?

解决方案 »

  1.   

    不能屏蔽Num Lock键,因为客户要用的就是通过小键盘来输入金额.
      

  2.   

    是让Num Lock键一直开着,我没说明白我原来也碰到过,客户总说小键盘总是莫名其妙的关了,我搞了半天也没查处什么原因,后来用我说的方法才搞定。
      

  3.   


    在模块中填加:
    Option ExplicitPrivate Declare Function CallNextHookEx Lib "user32" _
       (ByVal hHook As Long, _
        ByVal nCode As Long, _
        ByVal wParam As Long, _
        lParam As Any) As Long
        
    Private Declare Function SetWindowsHookEx Lib "user32" _
        Alias "SetWindowsHookExA" _
       (ByVal idHook As Long, _
        ByVal lpfn As Long, _
        ByVal hmod As Long, _
        ByVal dwThreadId As Long) As Long
        
    Private Declare Function UnhookWindowsHookEx Lib "user32" _
       (ByVal hHook As Long) As Long
       
    Private Declare Sub CopyMemory Lib "kernel32" _
        Alias "RtlMoveMemory" _
       (Destination As Any, _
        Source As Any, _
        ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT
        vkCode As Long
        scanCode As Long
        flags As Long
        time As Long
        dwExtraInfo As Long
    End TypePrivate Const WM_KEYDOWN = &H100
    Private Const WM_SYSKEYDOWN = &H104
    Private Const WM_KEYUP = &H101
    Private Const WM_SYSKEYUP = &H105Private Const NUM_LOCK = 144Private Const HC_ACTION = 0
    Private Const WH_KEYBOARD_LL = 13Private lngHook As Long'to hold Keyboard by heading off windows messages
    Private Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Dim blnHook As Boolean
        Dim p As PKBDLLHOOKSTRUCT
        
        If nCode = HC_ACTION Then
            Select Case wParam
                Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP
                    Call CopyMemory(p, ByVal lParam, Len(p))
                    If p.vkCode = NUM_LOCK Then
                        blnHook = True
                    End If
                Case Else
                    'do nothing
            End Select
        End If
        
        If blnHook Then
            LowLevelKeyboardProc = 1
        Else
            Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
        End If
    End FunctionPublic Sub KeyboardHook()
        lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
    End SubPublic Sub UnKeyboardHook()
        Call UnhookWindowsHookEx(lngHook)
    End Sub外面直接调KeyboardHook、UnKeyboardHook这两个函数就行了祝你好运!!
      

  4.   

    怎样自动将Num Lock设置在小键盘数字有效上呢?我希望能自动锁定在Num Lock灯亮的情况下,谢谢.
      

  5.   

    Const MIN_SEARCH_LENGTH As Integer = 1Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Private Declare Function SetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Const VK_NUMLOCK = &H90
    Const VK_SCROLL = &H91
    Const VK_CAPITAL = &H14
    Private Declare Sub GetKeyboardStateByString Lib "user32" Alias "GetKeyboardState" (ByVal pbKeyState As String)
    Private Declare Sub SetKeyboardStateByString Lib "user32" Alias "SetKeyboardState" (ByVal lppbKeyState As String)Dim NumLockKey As String * 256 NumLockKey = Space$(256)                  
    Call GetKeyboardStateByString(NumLockKey) 
    Mid$(NumLockKey, VK_NUMLOCK + 1, 1) = 1 
    call SetKeyboardStateByString(NumLockKey)  
    SendKeys "{NUMLOCK}", True