如何检查其他应用程序是否最小化?

时间:2009-06-16 18:09:43

标签: c#

如何检查其他应用程序是否已最小化?例如,在这样的循环中:

foreach(Process p in processes)
{
  // Does a process have a window?
  // If so, is it minimized, normal, or maximized
}

5 个答案:

答案 0 :(得分:12)

[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;
        }
    }                   
}

答案 1 :(得分:6)

没有最小化的“应用程序”。最好的选择是检查应用程序的主窗口是否为Iconic(最小化)。

IsIconic可用于检查窗口的标志性状态。如果窗口最小化,它将返回1。您可以使用process.MainWindowHandle调用此方法。

答案 2 :(得分:3)

如果窗口最小化(至少在Windows窗体中),则Location.X和Location.Y值均为-32000

答案 3 :(得分:1)

您应该使用原生EnumWindows() function,然后调用IsIconic,而不是枚举进程。

答案 4 :(得分:1)

你可以使用isZoomed for maximized和isIconic,通过注入user32 dll来最小化

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