At times it might be convenient to know how a given control got the focus, namely by means of the Tab key, an associated hotkey or a click of the mouse. You can learn this information through the GetKeyState API function, that returns the current state of a key. Here is a simple function that is meant to be called from within the GotFocus event of a control
Private Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal _ nVirtKey As Long) As IntegerFunction GotFocusMethod() As Integer If GetKeyState(vbKeyTab) < 0 Then If (GetKeyState(vbKeyShift) < 0) Then ' Shift-Tab key is pressed GotFocusMethod = 4 Else ' Tab key is pressed GotFocusMethod = 1 End If ElseIf GetKeyState(vbKeyMenu) < 0 Then ' Alt key is pressed (hotkey activation) GotFocusMethod = 2 ElseIf GetKeyState(vbLeftButton) < 0 Then ' mouse left button is pressed GotFocusMethod = 3 End IfEnd Function
This function returns 1 if the control got the focus by mean of the Tab key, 2 if a hotkey was pressed, 3 if the mouse was clicked, 4 if Shift-Tab was pressed, 0 if it cannot determine the method used (probably programmatically through a SetFocus method).
Thanks to Scott B. Kardos for adding the code that tests the Shift-Tab key.