by Simon Morgan (1 Submission)
Category: Windows System Services
Compatability: Visual Basic 5.0
Difficulty: Intermediate
Date Added: Wed 3rd February 2021
Rating:
(4 Votes)
Another way of changing the focus to a particular window, using an un-documented API called SwitchToThisWindow.This API works on Windows 3x, Windows 9x/ME and Windows 2000. I have found it much more reliable than Setfocus/SetFocusAPI or SetForegroundWindow
Inputs
Window caption
Assumes
I have defined a public function ( GetMessageWindow ) in order to show how the SwitchToThisWindow API works in conjunction with the FindWindow API. The GetMessageWindow function can of course be improved to accept parameters and make it more flexible. For this example I just use it to switch to a standard message box.
Code Returns
Long - Window handle on success, zero on failure
API DeclarationsSee code window
' Library imports
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SwitchToThisWindow Lib "user32" (ByVal hWnd As Long, ByVal hWindowState As Long) As Long
' Function to locate and focus on a MsgBox
Public Function GetMessageWindow() As Long
Dim hMessageBox As Long
' First get the message box's handle
hMessageBox& = FindWindow("#32770", vbNullString)
If hMessageBox Then
' Set focus on the message box
GetMessageWindow& = SwitchToThisWindow
(hMessageBox, vbNormalFocus)
Else
GetMessageWindow& = 0
End If
End Function
' Calling the GetMessageWindow function
RetVal& = GetMessageWindow()
If RetVal& Then
' Do something like SendKeys{Enter}
End If