Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than user32, prefix the name with the module name and a period.
FindWindow (user32)
.
C# Signature:
// For Windows Mobile, replace user32.dll with coredll.dll
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
// You can also call FindWindow(default(string), lpWindowName) or FindWindow((string)null, lpWindowName)
VB Signature:
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
<DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowByClass( _
ByVal lpClassName As String, _
ByVal zero As IntPtr) As IntPtr
End Function
<DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowByCaption( _
ByVal zero As IntPtr, _
ByVal lpWindowName As String) As IntPtr
End Function
Boo Signature:
[DllImport("user32", SetLastError : true)]
static def FindWindow(lpClassName as string, lpWindowName as string) as IntPtr:
pass
User-Defined Types:
None.
Notes:
The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.
*If lpClassName is NULL FindWindow will search for the window by the lpWindowName (window's title) only. This is useful if the class of a particular window is variable.
Sample Code (C#):
Think carefully before copying this sample code into your own production code, as it is not a robust solution. It assumes a) Notepad will start within 1/2 second b) the user is using English c) No other applications happen to have "Untitled - Notepad" in their title bar.
// Find window by Caption, and wait 1/2 a second and then try again.
public static int FindWindow(string windowName, bool wait)
{
int hWnd = FindWindow(windowName, null);
while (wait && hWnd == 0)
{
System.Threading.Thread.Sleep(500);
hWnd = FindWindow(windowName, null);
}
return hWnd;
}
// THE FOLLOWING METHOD REFERENCES THE SetForegroundWindow API
public static bool BringWindowToTop(string windowName, bool wait)
{
int hWnd = FindWindow(windowName, wait);
if (hWnd != 0)
{
return SetForegroundWindow((IntPtr)hWnd);
}
return false;
}
//Open Up blank Notepad First !
string lpszParentClass = "Notepad";
string lpszParentWindow = "Untitled - Notepad";
string lpszClass = "Edit";
IntPtr ParenthWnd = new IntPtr(0);
IntPtr hWnd = new IntPtr(0);
ParenthWnd = FindWindow(lpszParentClass,lpszParentWindow);
if (ParenthWnd.Equals(IntPtr.Zero))
Console.WriteLine("Notepad Not Running");
else
{
hWnd = FindWindowEx(ParenthWnd,hWnd,lpszClass,"");
if (hWnd.Equals(IntPtr.Zero))
Console.WriteLine("Notepad doesn't have an edit component ?");
else
{
Console.WriteLine("Notepad Window: " + ParenthWnd.ToString());
Console.WriteLine("Edit Control: " + hWnd.ToString());
}
}
Sample Code (VB.net):
'// VB (chellios at gmail dot com)
'// Open up a blank Notepad!
Dim lpszParentClass As String = "Notepad"
Dim lpszParentWindow As String = "Untitled - Notepad"
Dim lpszClass As String = "Edit"
Dim ParenthWnd As New IntPtr(0)
Dim hWnd As New IntPtr(0)
If ParenthWnd.Equals(IntPtr.Zero) Then
Debug.WriteLine("Notepad Not Running!")
Else
hWnd = FindWindowEx(ParenthWnd, hWnd, lpszClass, "")
If hWnd.Equals(IntPtr.Zero)
Debug.WriteLine("Notepad doesn't have an Edit component, how strange.")
Else
Debug.WriteLine("Notepad Window: " & ParenthWnd.ToString())
Debug.WriteLine("Edit Control: " & hWnd.ToString())
End If
End If
C# Managed Code Alternative to avoid Native calls to FindWindow:
You can avoid using FindWindow which is a native code by calling a combination of Process.GetProcessesByName and Process.MainWindowHandle. This article describes how to do that:
Note 1: This will only find the "main window of a process" if you are trying to locate a child window based on title, this may not be suitable.
Note 2: .Net applications sometimes return a window handle of 0 even when visible using this technique.
VB.NET Code:
Dim nWnd As IntPtr
Dim ceroIntPtr As New IntPtr(0)
Dim Wnd_name as String
Wnd_name= "Some App Name"
nWnd = FindWindow(Nothing, Wnd_name)
'show the info
If nWnd.Equals(ceroIntPtr) Then
MsgBox("App Not Running")
Else
MsgBox("App Running")
End If
The FindWindowEx API
7/24/2021 9:48:36 PM - a-202.69.38.82
The EnumWindows API
3/20/2019 10:44:34 AM - -98.152.226.218
The GetWindowThreadProcessId API
8/29/2011 5:20:18 AM - -71.187.199.49
The FindWindowEx API
7/24/2021 9:48:36 PM - a-202.69.38.82
Please edit this page!
Do you have...
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).