Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

ShowWindow (user32)
 
.
Summary

Do Not give this function the handle of the desktop!

C# Signature:

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

VB Signature:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As ShowWindowCommands) As Boolean
End Function

User-Defined Types:

ShowWindowCommands

Notes:

None.

Tips & Tricks:

You can use ShowWindow to hide a window, even if your app didn't create it! Simply call ShowWindow(hWnd, 0);

Sample Code:

/// <summary>Shows a Window</summary>
/// <remarks>
/// <para>To perform certain special effects when showing or hiding a
/// window, use AnimateWindow.</para>
///<para>The first time an application calls ShowWindow, it should use
///the WinMain function's nCmdShow parameter as its nCmdShow parameter.
///Subsequent calls to ShowWindow must use one of the values in the
///given list, instead of the one specified by the WinMain function's
///nCmdShow parameter.</para>
///<para>As noted in the discussion of the nCmdShow parameter, the
///nCmdShow value is ignored in the first call to ShowWindow if the
///program that launched the application specifies startup information
///in the structure. In this case, ShowWindow uses the information
///specified in the STARTUPINFO structure to show the window. On
///subsequent calls, the application must call ShowWindow with nCmdShow
///set to SW_SHOWDEFAULT to use the startup information provided by the
///program that launched the application. This behavior is designed for
///the following situations: </para>
///<list type="">
///    <item>Applications create their main window by calling CreateWindow
///    with the WS_VISIBLE flag set. </item>
///    <item>Applications create their main window by calling CreateWindow
///    with the WS_VISIBLE flag cleared, and later call ShowWindow with the
///    SW_SHOW flag set to make it visible.</item>
///</list></remarks>
/// <param name="hWnd">Handle to the window.</param>
/// <param name="nCmdShow">Specifies how the window is to be shown.
/// This parameter is ignored the first time an application calls
/// ShowWindow, if the program that launched the application provides a
/// STARTUPINFO structure. Otherwise, the first time ShowWindow is called,
/// the value should be the value obtained by the WinMain function in its
/// nCmdShow parameter. In subsequent calls, this parameter can be one of
/// the WindowShowStyle members.</param>
/// <returns>
/// If the window was previously visible, the return value is nonzero.
/// If the window was previously hidden, the return value is zero.
/// </returns>
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow);

/// <summary>Enumeration of the different ways of showing a window using
/// ShowWindow</summary>
private enum WindowShowStyle : uint
{
    /// <summary>Hides the window and activates another window.</summary>
    /// <remarks>See SW_HIDE</remarks>
    Hide = 0,
    /// <summary>Activates and displays a window. If the window is minimized
    /// or maximized, the system restores it to its original size and
    /// position. An application should specify this flag when displaying
    /// the window for the first time.</summary>
    /// <remarks>See SW_SHOWNORMAL</remarks>
    ShowNormal = 1,
    /// <summary>Activates the window and displays it as a minimized window.</summary>
    /// <remarks>See SW_SHOWMINIMIZED</remarks>
    ShowMinimized = 2,
    /// <summary>Activates the window and displays it as a maximized window.</summary>
    /// <remarks>See SW_SHOWMAXIMIZED</remarks>
    ShowMaximized = 3,
    /// <summary>Maximizes the specified window.</summary>
    /// <remarks>See SW_MAXIMIZE</remarks>
    Maximize = 3,
    /// <summary>Displays a window in its most recent size and position.
    /// This value is similar to "ShowNormal", except the window is not
    /// actived.</summary>
    /// <remarks>See SW_SHOWNOACTIVATE</remarks>
    ShowNormalNoActivate = 4,
    /// <summary>Activates the window and displays it in its current size
    /// and position.</summary>
    /// <remarks>See SW_SHOW</remarks>
    Show = 5,
    /// <summary>Minimizes the specified window and activates the next
    /// top-level window in the Z order.</summary>
    /// <remarks>See SW_MINIMIZE</remarks>
    Minimize = 6,
      /// <summary>Displays the window as a minimized window. This value is
      /// similar to "ShowMinimized", except the window is not activated.</summary>
    /// <remarks>See SW_SHOWMINNOACTIVE</remarks>
    ShowMinNoActivate = 7,
    /// <summary>Displays the window in its current size and position. This
    /// value is similar to "Show", except the window is not activated.</summary>
    /// <remarks>See SW_SHOWNA</remarks>
    ShowNoActivate = 8,
    /// <summary>Activates and displays the window. If the window is
    /// minimized or maximized, the system restores it to its original size
    /// and position. An application should specify this flag when restoring
    /// a minimized window.</summary>
    /// <remarks>See SW_RESTORE</remarks>
    Restore = 9,
    /// <summary>Sets the show state based on the SW_ value specified in the
    /// STARTUPINFO structure passed to the CreateProcess function by the
    /// program that started the application.</summary>
    /// <remarks>See SW_SHOWDEFAULT</remarks>
    ShowDefault = 10,
    /// <summary>Windows 2000/XP: Minimizes a window, even if the thread
    /// that owns the window is hung. This flag should only be used when
    /// minimizing windows from a different thread.</summary>
    /// <remarks>See SW_FORCEMINIMIZE</remarks>
    ForceMinimized = 11
}
//...In your code some where: show a form, without making it active
ShowWindow(this.Handle, WindowShowStyle.ShowNoActivate);

Topmost Window Without Focus

Use this code within a class to show a topmost form without giving focus to it.

private const int SW_SHOWNOACTIVATE = 4;
private const int HWND_TOPMOST = -1;
private const uint SWP_NOACTIVATE = 0x0010;

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(
     int hWnd,           // window handle
     int hWndInsertAfter,    // placement-order handle
     int X,          // horizontal position
     int Y,          // vertical position
     int cx,         // width
     int cy,         // height
     uint uFlags);       // window positioning flags

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

static void ShowInactiveTopmost(Form frm)
{
     ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
     SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
     frm.Left, frm.Top, frm.Width, frm.Height,
     SWP_NOACTIVATE);
}

Enum ShowWindowStyle (VB.NET)

Public Enum WindowShowStyle As UInteger
    ''' <summary>Hides the window and activates another window.</summary>
    ''' <remarks>See SW_HIDE</remarks>
    Hide = 0
    '''<summary>Activates and displays a window. If the window is minimized
    ''' or maximized, the system restores it to its original size and
    ''' position. An application should specify this flag when displaying
    ''' the window for the first time.</summary>
    ''' <remarks>See SW_SHOWNORMAL</remarks>
    ShowNormal = 1
    ''' <summary>Activates the window and displays it as a minimized window.</summary>
    ''' <remarks>See SW_SHOWMINIMIZED</remarks>
    ShowMinimized = 2
    ''' <summary>Activates the window and displays it as a maximized window.</summary>
    ''' <remarks>See SW_SHOWMAXIMIZED</remarks>
    ShowMaximized = 3
    ''' <summary>Maximizes the specified window.</summary>
    ''' <remarks>See SW_MAXIMIZE</remarks>
    Maximize = 3
    ''' <summary>Displays a window in its most recent size and position.
    ''' This value is similar to "ShowNormal", except the window is not
    ''' actived.</summary>
    ''' <remarks>See SW_SHOWNOACTIVATE</remarks>
    ShowNormalNoActivate = 4
    ''' <summary>Activates the window and displays it in its current size
    ''' and position.</summary>
    ''' <remarks>See SW_SHOW</remarks>
    Show = 5
    ''' <summary>Minimizes the specified window and activates the next
    ''' top-level window in the Z order.</summary>
    ''' <remarks>See SW_MINIMIZE</remarks>
    Minimize = 6
    '''   <summary>Displays the window as a minimized window. This value is
    '''   similar to "ShowMinimized", except the window is not activated.</summary>
    ''' <remarks>See SW_SHOWMINNOACTIVE</remarks>
    ShowMinNoActivate = 7
    ''' <summary>Displays the window in its current size and position. This
    ''' value is similar to "Show", except the window is not activated.</summary>
    ''' <remarks>See SW_SHOWNA</remarks>
    ShowNoActivate = 8
    ''' <summary>Activates and displays the window. If the window is
    ''' minimized or maximized, the system restores it to its original size
    ''' and position. An application should specify this flag when restoring
    ''' a minimized window.</summary>
    ''' <remarks>See SW_RESTORE</remarks>
    Restore = 9
    ''' <summary>Sets the show state based on the SW_ value specified in the
    ''' STARTUPINFO structure passed to the CreateProcess function by the
    ''' program that started the application.</summary>
    ''' <remarks>See SW_SHOWDEFAULT</remarks>
    ShowDefault = 10
    ''' <summary>Windows 2000/XP: Minimizes a window, even if the thread
    ''' that owns the window is hung. This flag should only be used when
    ''' minimizing windows from a different thread.</summary>
    ''' <remarks>See SW_FORCEMINIMIZE</remarks>
    ForceMinimized = 11

    End Enum

Alternative Managed API:

- It's possible to use, in some cases, the ShowInTaskbar form's property.

- Override the ShowWithoutActivation property and make it always return true.

  protected override bool ShowWithoutActivation
  {
     get { return true; }
  }
  // Do not set the TopMost property to true, as this will give the form focus when calling Show.
  // It is still not possible to make the form top most and showing it without activating it.
  // I do not know how, anyway.

Do you know one? Please contribute it!

Documentation
ShowWindow on MSDN

Here's a thought:

You could capture the current focused window or form, store that, then once calling topmost window on targeted form/dialog, recall focus to the stored window.

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).

 
Access PInvoke.net directly from VS:
Terms of Use
Find References
Show Printable Version
Revisions