C#以编程方式取消最小化表单

Dan*_*ely 9 c# winforms

如何获取当前最小化的表单并将其还原到以前的状态.我找不到任何方法来确定它以前WindowStateNormal或是Maximized; 但我知道信息必须存储在某个地方,因为Windows在任务栏上使用应用程序时没有问题.

Ree*_*sey 9

没有托管API.这样做的方法是PInvoke GetWindowPlacement并检查WPF_RESTORETOMAXIMIZED.

有关详细信息,请参阅此Microsoft How To(在VB中演示该技术).

在C#中,这将是:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);


private struct WINDOWPLACEMENT
{
    public int length;
    public int flags;
    public int showCmd;
    public System.Drawing.Point ptMinPosition;
    public System.Drawing.Point ptMaxPosition;
    public System.Drawing.Rectangle rcNormalPosition;
}

public void RestoreFromMinimzied(Form form)
{
   const int WPF_RESTORETOMAXIMIZED = 0x2;
   WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
   placement.length = Marshal.SizeOf(placement);
   GetWindowPlacement(form.Handle, ref placement);

   if ((placement.flags & WPF_RESTORETOMAXIMIZED) == WPF_RESTORETOMAXIMIZED)
       form.WindowState = FormWindowState.Maximized;
   else
       form.WindowState = FormWindowState.Normal;
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*ebs 8

 this.WindowState = FormWindowState.Normal;
Run Code Online (Sandbox Code Playgroud)

你还有:

 this.WindowState = FormWindowState.Minimized;
 this.WindowState = FormWindowState.Maximized;
Run Code Online (Sandbox Code Playgroud)

啊,我误解了这个问题:

从Minimized恢复WindowState应该是您正在寻找的.它说你可以像这样模仿任务栏的行为:

SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
Run Code Online (Sandbox Code Playgroud)

  • 这不能回答他的问题 - 如果表格目前最小化,他会询问是转到正常还是最大化... (2认同)