此方法适用于Win2k (锁定左右WIN键,你可以修改一下)在窗体中:
Private 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 Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
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 HC_ACTION = 0
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP = &H105
Private Const VK_LWIN = &H5B
Private Const VK_RWIN = &H5C
Private Const WH_KEYBOARD_LL = 13Private PrevHook As Long
Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim fEatKeystroke As Boolean
    Dim p As PKBDLLHOOKSTRUCT
    
    If ncode = HC_ACTION Then
        Select Case wParam
            Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP
                CopyMemory p, ByVal lParam, Len(p)
                If p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Then
                    fEatKeystroke = True
                End If
            Case Else
                'do nothing
        End Select
    End If
    
    If fEatKeystroke Then
        LowLevelKeyboardProc = 1
    Else
        CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam
    End If
End Function
Public Sub Hook()
    PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub
Public Sub UnHook()
    UnhookWindowsHookEx PrevHook
End Sub
在窗体中:
Private Form_Load()
    Hook()
End SubPrivate Sub Form_Unload(Cancel As Integer)
    UnHook()
End Sub