SetForegroundWindow (user32)
Last changed: -81.5.16.253

.
Summary

C# Signature:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

VB Signature:

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Long

User-Defined Types:

None.

Notes:

The [DllImport("user32.dll")] should be [DllImport("coredll.dll")] for WindowsMobile (at least on WindowsMobile 5.0)

Tips & Tricks:

This is especially useful for test automation to make sure the Application Under Test (AUT) retains focus before manipulating it.

This may be called several times in an automated test script, so it is best to create a method similar to the example below.

Sample Code (C#):

public static void Main(string[] args)
{
    // test code here...
    CheckAutFocus(myProcess.MainWindowHandle);
    // more test code...
}

public static void CheckAutFocus(hWnd)
{
    if (GetForegroundWindow() != hWnd)
    {
        SetForegroundWindow(hWnd);
    }
}

Sample Code (C#):

        public static bool BringWindowToTop(string windowName, bool wait)
        {
            int hWnd = FindWindow(windowName, wait);
            if (hWnd != 0)
            {
                return SetForegroundWindow((IntPtr)hWnd);
            }
            return false;
        }

        // THE FOLLOWING METHOD REFERENCES THE FindWindowAPI
        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;
        }

Alternative Managed API:

The ManagedWindowsApi project (http://mwinapi.sourceforge.net) provides a static property ManagedWinapi.SystemWindow.ForegroundWindow which can be set.

Documentation