FindWindow (user32)
Last changed: 147.78.47.33

.

C# Signature:

// For Windows Mobile, replace user32.dll with coredll.dll
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string 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

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.

Works hand-in-hand with FindWindowEx

*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#):

        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("What the F??? 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)

ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow)

If ParenthWnd.Equals(IntPtr.Zero) Then
    Debug.WriteLine("Notepad Not Running!")
Else
    hWnd = FindWindowEx(ParenthWnd, hWnd, lpszClass, "")

    If hWnd.Equals(IntPtr.Zero)
       Debug.WriteLine("What the F??? 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:

http://www.mycsharpcorner.com/Post.aspx?postID=32

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 Running")
    Else
        MsgBox("App Not Running")
    End If