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.
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(null, windowName);
while (wait && hWnd == 0)
{
System.Threading.Thread.Sleep(500);
hWnd = FindWindow(null, windowName);
}
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
VB.NET "Slightly" Managed Class (feel free to optimize)
Public Class FindWindowHandle
#Region " User32 Functions "
''' <summary>
''' Retrieves a handle to the top-level window whose class name and window name
''' match the specified strings. This function does not search child windows.
''' This function does not perform a case-sensitive search.
''' </summary>
''' <param name="lpClassName"></param>
''' <param name="lpWindowName"></param>
''' <returns></returns>
''' <remarks></remarks>
<DllImport("User32.dll")> _
Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
End Function
''' <summary>
''' Retrieves a handle to a window whose class name and window name match the specified strings.
''' The function searches child windows, beginning with the one following the specified child window.
''' This function does not perform a case-sensitive search.
''' </summary>
''' <param name="parentHandle"></param>
''' <param name="childAfter"></param>
''' <param name="lpszClass"></param>
''' <param name="lpszWindow"></param>
''' <returns></returns>
''' <remarks></remarks>
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, _
ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr
End Function
#End Region
#Region " Vars "
''' <summary>
''' The class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function.
''' If ClassName points to a string, it specifies the window class name.
''' The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.
''' If ClassName is NULL, it finds any window whose title matches the WindowName parameter.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Property ClassName As String
''' <summary>
''' The window name (the window's title). If this parameter is NULL, all window names match.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Property WindowName As String
''' <summary>
''' A handle to the parent window whose child windows are to be searched.
''' If Parent is NULL, the function uses the desktop window as the parent window.
''' The function searches among windows that are child windows of the desktop.
''' If Parent is HWND_MESSAGE, the function searches all message-only windows.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Property ParentHandle As IntPtr
''' <summary>
''' A handle to a child window. The search begins with the next child window in the Z order.
''' The child window must be a direct child window of Parent, not just a descendant window.
''' If ChildAfter is NULL, the search begins with the first child window of Parent.
''' Note that if both Parent and ChildAfter are NULL, the function searches all top-level and
''' message-only windows.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Private Shared Property ChildHandle As IntPtr
#End Region
Public Shared ReadOnly Property hwnd_DesktopIcons As IntPtr
Get
Return FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", vbNullString)
End Get
End Property
Public Shared ReadOnly Property hwnd_StartBar As IntPtr
Get
Return FindWindow("Shell_traywnd", vbNullString)
End Get
End Property
Public Shared ReadOnly Property hwnd_StartBarOrb As IntPtr
Get
Return FindWindow("Button", vbNullString)
End Get
End Property
Class GetIt
Public Shared Function by_ClassName(ByVal value As String)
Try
ClassName = value
Return FindWindow(ClassName, vbNull)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function by_WindowName(ByVal value As String)
Try
WindowName = value
Return FindWindow(vbNull, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function by_WindowNameAndClassName(ByVal v_ClassName As String, ByVal v_WindowName As String)
Try
ClassName = v_ClassName
WindowName = v_WindowName
Return FindWindow(ClassName, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byChildHandle(ByVal v_ChildHandle As IntPtr)
Try
ChildHandle = v_ChildHandle
Return FindWindowEx(IntPtr.Zero, ChildHandle, vbNullString, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byParentHandle(ByVal v_ParentHandle As IntPtr)
Try
ParentHandle = v_ParentHandle
Return FindWindowEx(ParentHandle, IntPtr.Zero, vbNullString, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Class _byChildHandleAnd
Public Shared Function andClassName(ByVal v_ChildHandle As IntPtr, _
ByVal v_ClassName As String)
Try
ChildHandle = v_ChildHandle
ClassName = v_ClassName
Return FindWindowEx(IntPtr.Zero, ChildHandle, ClassName, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function andWindowName(ByVal v_ChildHandle As IntPtr, _
ByVal v_WindowName As String)
Try
ChildHandle = v_ChildHandle
WindowName = v_WindowName
Return FindWindowEx(IntPtr.Zero, ChildHandle, vbNullString, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function WindowAndClassName(ByVal v_ChildHandle As IntPtr, _
ByVal v_ClassName As String, ByVal v_WindowName As String)
Try
ChildHandle = v_ChildHandle
ClassName = v_ClassName
WindowName = v_WindowName
Return FindWindowEx(IntPtr.Zero, ChildHandle, ClassName, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
End Class
Class _byParentHandleAnd
Public Shared Function andClassName(ByVal v_ParentHandle As IntPtr, _
ByVal v_ClassName As String)
Try
ParentHandle = v_ParentHandle
ClassName = v_ClassName
Return FindWindowEx(ParentHandle, IntPtr.Zero, ClassName, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function andWindowName(ByVal v_ParentHandle As IntPtr, _
ByVal v_WindowName As String)
Try
ParentHandle = v_ParentHandle
WindowName = v_WindowName
Return FindWindowEx(ParentHandle, IntPtr.Zero, vbNullString, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function WindowAndClassName(ByVal v_ParentHandle As IntPtr, _
ByVal v_ClassName As String, ByVal v_WindowName As String)
Try
ParentHandle = v_ParentHandle
ClassName = v_ClassName
WindowName = v_WindowName
Return FindWindowEx(ParentHandle, IntPtr.Zero, ClassName, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
End Class
End Class
Class Search
Class Desktop
Public Shared Function byClassName(ByVal value As String)
Try
ClassName = value
Return FindWindowEx(IntPtr.Zero, IntPtr.Zero, ClassName, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byWindowName(ByVal value As String)
Try
WindowName = value
Return FindWindowEx(IntPtr.Zero, IntPtr.Zero, vbNullString, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byWindowAndClassName(ByVal v_ClassName As String, ByVal v_WindowName As String)
Try
ClassName = v_ClassName
WindowName = v_WindowName
Return FindWindowEx(IntPtr.Zero, IntPtr.Zero, ClassName, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
End Class
Class MessageOnlyWindows
Public Shared HWND_MESSAGE As IntPtr = New IntPtr(-3)
Public Shared Function byClassName(ByVal value As String)
Try
ClassName = value
Return FindWindowEx(HWND_MESSAGE, IntPtr.Zero, ClassName, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byClassName(ByVal StartingChildHandle As IntPtr, ByVal value As String)
Try
ClassName = value
ChildHandle = StartingChildHandle
Return FindWindowEx(HWND_MESSAGE, ChildHandle, ClassName, vbNullString)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byWindowName(ByVal value As String)
Try
WindowName = value
Return FindWindowEx(HWND_MESSAGE, IntPtr.Zero, vbNullString, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byWindowName(ByVal StartingChildHandle As IntPtr, ByVal value As String)
Try
WindowName = value
ChildHandle = StartingChildHandle
Return FindWindowEx(HWND_MESSAGE, ChildHandle, vbNullString, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byWindowAndClassName(ByVal v_ClassName As String, ByVal v_WindowName As String)
Try
ClassName = v_ClassName
WindowName = v_WindowName
Return FindWindowEx(HWND_MESSAGE, IntPtr.Zero, ClassName, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
Public Shared Function byWindowAndClassName(ByVal StartingChildHandle As IntPtr, _
ByVal v_ClassName As String, ByVal v_WindowName As String)
Try
ClassName = v_ClassName
WindowName = v_WindowName
ChildHandle = StartingChildHandle
Return FindWindowEx(HWND_MESSAGE, ChildHandle, ClassName, WindowName)
Catch ex As Exception
Return vbNull
End Try
End Function
End Class
End Class
End Class
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
TODO - a short description
12/20/2022 5:48:49 AM - -86.11.174.174
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).