'Module code
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 CallNextHookEx Lib "user32" ( _
ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByRef lParam As KBDLLHOOKSTRUCT _
) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" ( _
ByVal hHook As Long _
) As Long
Declare Sub keybd_event Lib "user32.dll" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long _
)
Private Declare Function SetTimer Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long _
) As Long
Private Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type
Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13&
Private Const LLKHF_ALTDOWN As Long = 16&
Private Const LLKHF_EXTENDED As Long = 1&
Private Const LLKHF_UP As Long = 128&
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_NUMPAD7 = &H67
Private Const VK_ALT = &H12
Private hKeyb As Long
Private blnExit As Boolean
Private Function KeybCallback(ByVal Code As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
If blnExit Then
KeybCallback = 1
Exit Function
End If
If (Code = HC_ACTION) Then
If (lParam.vkCode = vbKeyQ) And (lParam.flags And LLKHF_ALTDOWN = LLKHF_ALTDOWN) Then
If lParam.flags And LLKHF_UP = LLKHF_UP Then
Call SetTimer(0, 1, 1, AddressOf TimerProc)
blnExit = True
KeybCallback = 1
Exit Function
End If
End If
End If
KeybCallback = CallNextHookEx(hKeyb, Code, wParam, lParam)
End Function
Private Sub TimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
keybd_event vbKeyQ, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_ALT, 0, KEYEVENTF_KEYUP, 0
blnExit = False
keybd_event VK_NUMPAD7, 0, 0, 0
keybd_event VK_NUMPAD7, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_ALT, 0, 0, 0
KillTimer hWnd, idEvent
End Sub
Public Sub HookKeyboard()
UnhookKeyboard
hKeyb = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeybCallback, App.hInstance, 0&)
End Sub
Public Sub UnhookKeyboard()
If hKeyb <> 0 Then
Call UnhookWindowsHookEx(hKeyb)
hKeyb = 0
End If
End Sub