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)
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
"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)
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