如何检查其他应用程序是否最小化?例如在这样的循环中:
foreach(Process p in processes)
{
// Does a process have a window?
// If so, is it minimized, normal, or maximized
}
Run Code Online (Sandbox Code Playgroud)
aqu*_*nas 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有最小化的"应用程序".最好的选择是检查应用程序的主窗口是否为标识(最小化).
IsIconic可用于检查窗口的标志状态.如果窗口最小化,它将返回1.您可以使用process.MainWindowHandle调用它.
您可以通过注入 user32 dll 使用 isZoomed 进行最大化,使用 isIconic 进行最小化
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool IsZoomed(IntPtr hWnd);
Run Code Online (Sandbox Code Playgroud)