作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天我可以得到最小化应用程序窗口的屏幕截图。例如,如果我打开画图,即使画图已最小化,我也会看到画图主窗口的屏幕截图。
这是获取 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/
我是一名优秀的程序员,十分优秀!