【发布时间】:2017-06-21 21:27:28
【问题描述】:
我们需要一个应用的屏幕截图来进行单元测试。 CaptureScreen() 和 CopyFromScreen() 以某种方式忽略该应用程序并返回空桌面的图片。所以我们写这个来伪造PrtScn 击键:
public static Bitmap GetAltScreenshot()
{
Clipboard.Clear();
SendKeys.SendWait("{PRTSC}");
while (!Clipboard.ContainsImage())
{
Thread.Sleep(500);
}
return new Bitmap(Clipboard.GetImage());
}
Alt 不是击键的一部分,因此它应该返回一个整个屏幕的位图。然而不知何故,这个 sn-p 只返回焦点窗口。这很好,这解决了我们的问题 - 但我们不明白如何。
为什么只返回聚焦窗口的快照,而不是整个监视器?
【问题讨论】:
-
@GeorgeJohnston 相信我,我们之前尝试过使用
g.CopyFromScreen,以及我们能找到的所有其他捕获方法。它们在我的机器上都表现良好,但在公司内的其他机器上却给出了奇怪的结果。 -
可能是 SendKeys 类只是将“{PRTSC}”键字符串解释为 Alt + PrtScn 组合键吗?另外,您也许可以手动将焦点设置为整个屏幕? link 在第一个注释中。
-
您是否尝试过在发送 {PRTSC} 之前执行
SendKeys.Flush(),这有点远,但只是为了确保您在队列中没有其他消息,这至少值得排除。 -
@Brian
SendKeys.Flush()无效。无论有没有它,代码都能完美运行。
标签: c# automation screenshot sendkeys