2009-06-16 116 views

回答

11
[DllImport("user32.dll")] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     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; 
    } 

if (p.MainWindowHandle != IntPtr.Zero) { 
    if (p.MainWindowTitle.Contains("Notepad")) { 
     WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); 
     GetWindowPlacement(p.MainWindowHandle, ref placement); 
     switch (placement.showCmd) { 
      case 1: 
      Console.WriteLine("Normal"); 
      break; 
      case 2: 
      Console.WriteLine("Minimized"); 
      break; 
      case 3: 
      Console.WriteLine("Maximized"); 
      break; 
     } 
    }     
} 
5

沒有這樣的事情作爲最小化的「應用程序」。最好的選擇是檢查應用程序的主窗口是否是標誌性的(最小化)。

IsIconic可用於檢查窗口的圖標狀態。如果窗口最小化,它將返回1。您可以撥打電話process.MainWindowHandle

+2

要確定窗口是否最大化,您可以調用IsZoomed。 – aquinas 2009-06-16 18:34:03

+0

是的 - 很好的補充。 – 2009-06-16 18:36:11

1

而不是枚舉進程,您應該使用本機EnumWindows() function,然後調用IsIconic。

+0

爲什麼?順便說一句,EnumWindows是我的原始版本,但我將其更改爲託管代碼。 – AngryHacker 2009-06-16 18:49:54

+0

@AngryHacker:你仍然可以通過P/Invoke進入EnumWindows。這可能比嘗試使用流程更好,除非您只對主窗口感興趣。您仍然需要P/Invoke for IsIconic(或GetWindowPlacement)。 – 2009-06-16 18:55:08

3

如果被最小化窗口(Windows窗體中至少)同時Location.X和Location.Y值-32000

0

您可以使用isZoomed的最大化,而isIconic通過注入DLL USER32最小化

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool IsIconic(IntPtr hWnd); 
[DllImport("user32.dll")] 
static extern bool IsZoomed(IntPtr hWnd); 
相關問題