c# - 有没有办法在最小化进程时也从进程中获取屏幕截图?

标签 c# .net winforms

今天我可以得到最小化应用程序窗口的屏幕截图。 例如,如果我打开画图,即使画图已最小化,我也会看到画图主窗口的屏幕截图。

这是获取 WindowsSnap 的类,它的代码有点长,所以我将它添加到 pastebin.com WindowSnap.cs

并且 WindowSnapCollection 类也将其添加到 pastebin.com WindowSnapCollection.cs

在 form1 顶部和构造函数中我正在做: 变量:

private Graphics g;
private Image img;
private Image imgClone;

然后在构造函数中:

        img = new Bitmap(pictureBoxSnap.Width, pictureBoxSnap.Height);
        imgClone = new Bitmap(pictureBoxSnap.Width, pictureBoxSnap.Height);
        Graphics g;
        using (g = Graphics.FromImage(img))
        {
            g.Clear(Color.White);
        }

        pictureBoxSnap.Image = img;

        this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());
        for (int i = listBoxSnap.Items.Count - 1; i >= 0; i--)
        {
            string tt = listBoxSnap.Items[i].ToString();
            if (tt.Contains(" ,"))
            {
                listBoxSnap.Items.RemoveAt(i);
            }
        }
        buttonSnap.Enabled = true;

        string[] myList = new string[listBoxSnap.Items.Count];

        for (int i = 0; i < listBoxSnap.Items.Count; i++)
        {
            string tt = listBoxSnap.Items[i].ToString();
            int index = tt.LastIndexOf(",");
            myList[i] = tt.Substring(0, index);
        }

最后得到的是打开的应用程序窗口截图最小化应用程序列表

我现在有 65 个进程在运行 我想知道我的问题是我是否还能以某种方式获得最小化进程的屏幕截图?并不是所有的应用程序。

最佳答案

遍历流程,调用API函数IsIconic对于每个有效的 hWnd。例如:

foreach (Process p in Process.GetProcesses())
{
    if (p.MainWindowHandle != IntPtr.Zero)
    {
        if (IsIconic(p.MainWindowHandle))
        {
            System.Diagnostics.Debug.Print("Window: {0} Is minimized", p.MainWindowTitle);
        }
    }
}

其中 IsIconic 由以下 p/Invoke 签名定义。

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

关于c# - 有没有办法在最小化进程时也从进程中获取屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31236877/

相关文章:

c# - Winform 控件上的双向数据绑定(bind)动态对象

c# - 类/数据库的循环引用(C#, Entity Framework 代码优先)

c# - WebRequest 与 FileWebRequest

c# - AES 加密单个 block 显示错误

c# - 关于检查 WCF 连接是否打开的问题

c# - 在 Windows 窗体项目上使用 DataAnnotations

c# - 使用 C# 以编程方式检测 Windows 登录尝试

c# - 在 Windows 服务中获取计算机名称?

c# - 路由覆盖

.net - 如何以编程方式为 Outlook 生成电子邮件线程?