如何檢查另一個應用程序是否已最小化?例如在這樣的循環中:如何檢查是否另一個應用程序最小化?
foreach(Process p in processes)
{
// Does a process have a window?
// If so, is it minimized, normal, or maximized
}
如何檢查另一個應用程序是否已最小化?例如在這樣的循環中:如何檢查是否另一個應用程序最小化?
foreach(Process p in processes)
{
// Does a process have a window?
// If so, is it minimized, normal, or maximized
}
[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;
}
}
}
沒有這樣的事情作爲最小化的「應用程序」。最好的選擇是檢查應用程序的主窗口是否是標誌性的(最小化)。
IsIconic可用於檢查窗口的圖標狀態。如果窗口最小化,它將返回1。您可以撥打電話process.MainWindowHandle。
而不是枚舉進程,您應該使用本機EnumWindows() function,然後調用IsIconic。
爲什麼?順便說一句,EnumWindows是我的原始版本,但我將其更改爲託管代碼。 – AngryHacker 2009-06-16 18:49:54
@AngryHacker:你仍然可以通過P/Invoke進入EnumWindows。這可能比嘗試使用流程更好,除非您只對主窗口感興趣。您仍然需要P/Invoke for IsIconic(或GetWindowPlacement)。 – 2009-06-16 18:55:08
如果被最小化窗口(Windows窗體中至少)同時Location.X和Location.Y值-32000
您可以使用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);
要確定窗口是否最大化,您可以調用IsZoomed。 – aquinas 2009-06-16 18:34:03
是的 - 很好的補充。 – 2009-06-16 18:36:11