PSS ID Number: 177992
Article Last Modified on 7/2/2004
74905 PRB: Access Key Causes Different Event Order than Mouse Click
Public Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
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 PostMessage Lib "user32" _
Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Const WH_KEYBOARD = 2
Public Const KBH_MASK = &H20000000
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Global hHook As Long
Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
If nCode >= 0 Then
'Process keys you want to filter
If wParam = Asc("C") And (lParam And KBH_MASK) <> 0 Then
If (lParam And &HC0000000) = 0 Then
Form1.Command1.SetFocus
Call PostMessage(Form1.Command1.hwnd, _
WM_LBUTTONDOWN, 0, &H20002)
Call PostMessage(Form1.Command1.hwnd, _
WM_LBUTTONUP, 0, &H20002)
KeyboardProc = 1
Exit Function
End If
End If
End If
KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
Option Explicit
Private Sub Command1_Click()
Debug.Print "Command1_Click"
End Sub
Private Sub Command1_GotFocus()
Debug.Print "Command1_GotFocus"
End Sub
Private Sub Form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD, _
AddressOf KeyboardProc, 0&, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnhookWindowsHookEx(hHook)
End Sub
Private Sub Text1_LostFocus()
Debug.Print "Text1_LostFocus"
End Sub
Text1_LostFocus Command1_GotFocus Command1_ClickSet the focus to the text box and press the ALT+C keys and note that the same events occur.
Additional query words: subclass
Keywords: kbhowto KB177992
Technology: kbAudDeveloper kbVB500 kbVB500Search kbVB600 kbVB600Search kbVBSearch kbZNotKeyword2 kbZNotKeyword6