键盘上有个快捷键,按下打开开始菜单,请问如何禁止和恢复?

解决方案 »

  1.   

    http://www.china-askpro.com/msg3/qa95.shtml
      

  2.   

    Private Declare Function SystemParametersInfo Lib _
    "user32" Alias "SystemParametersInfoA" (ByVal uAction _
    As Long, ByVal uParam As Long, ByVal lpvParam As Any, _
    ByVal fuWinIni As Long) As Long 
    Code
    Sub DisableCtrlAltDelete(bDisabled As Boolean)
    Dim X As Long
    X = SystemParametersInfo(97, bDisabled, CStr(1), 0)
    End SubUse
    To disable Ctrl-Alt-Delete:
    Call DisableCtrlAltDelete(True)
    To enable Ctrl-Alt-Delete:
    Call DisableCtrlAltDelete(False)
      

  3.   

    Public 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
    Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPublic Const SW_SHOW = 5
    Public Const SW_HIDE = 0
    Public Const SW_RESTORE = 9Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongType EVENTMSG
            message As Long
            paramL As Long
            paramH As Long
            time As Long
            hwnd As Long
    End TypePublic Const WH_KEYBOARD_LL = 13
    Public Const Alt_Down = &H20'消息
    Public Const HC_ACTION = 0
    Public Const HC_SYSMODALOFF = 5
    Public Const HC_SYSMODALON = 4Public Const WM_KEYDOWN = &H100
    Public Const WM_KEYUP = &H101
    Public Const WM_SYSKEYDOWN = &H104
    Public Const WM_SYSKEYUP = &H105Public msg As EVENTMSGPublic lHook As Long
    Public lNum As Long
    Public Function CallHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Dim bflag  As Boolean
        bflag = False
        If code = HC_ACTION Then
          CopyMemory msg, lParam, LenB(msg)
          Select Case wParam
            Case WM_SYSKEYDOWN, WM_SYSKEYUP, WM_KEYDOWN, WM_KEYUP:
                'Win键  Menu键
                bflag = (msg.message = 91) Or (msg.message = 92) Or (msg.message = 93)
                'Ctrl+ESC
                bflag = bflag Or ((GetKeyState(vbKeyControl) And &H8000) <> 0 And (msg.message = vbKeyEscape))
                'Alt+Tab
                bflag = bflag Or ((msg.message = vbKeyTab) And (msg.paramH And Alt_Down) <> 0)
                'Alt+ESC
                bflag = bflag Or ((msg.paramH And Alt_Down) <> 0 And (msg.message = vbKeyEscape))
           End Select
        End If
            
        If bflag = True Then
          CallHookProc = 1
        Else
          CallHookProc = 0
        End If
        
        If code <> 0 Then
          CallHookProc = CallNextHookEx(0, code, wParam, lParam)
        End If’加钩子
     lHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallHookProc, App.hInstance, 0)‘卸钩子
    If lHook <> 0 Then
          UnhookWindowsHookEx lHook
       End If
      
    End Function