Determine how a control got the focus

Determine how a control got the focus

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) ' Shift-Tab key is pressed            GotFocusMethod = 4        Else            ' Tab key is pressed            GotFocusMethod = 1        End If    ElseIf GetKeyState(vbKeyMenu) ' Alt key is pressed (hotkey activation)        GotFocusMethod = 2    ElseIf GetKeyState(vbLeftButton) ' 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.


Share the Post: