加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 当最小化时,是否有任何方法可以从流程中获取屏幕截图?

发布时间:2020-12-15 07:52:39 所属栏目:百科 来源:网络整理
导读:今天我现在可以获得最小化应用程序窗口的截图. 例如,如果我打开Paint,即使Paint被最小化,我也会看到Paint主窗口的屏幕截图. 这个获取WindowsSnap的类有点长代码,所以我把它添加到pastebin.com WindowSnap.cs WindowSnapCollection类也将它添加到pastebin.com
今天我现在可以获得最小化应用程序窗口的截图.
例如,如果我打开Paint,即使Paint被最小化,我也会看到Paint主窗口的屏幕截图.

这个获取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个进程在运行我想知道我的问题是我是否能以某种方式获得最小化进程的屏幕截图?而不是所有的应用程序.

解决方法

遍历这些过程,并为每个有效的hWnd调用API函数 IsIconic.例如:
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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读