C# 自动化';PrtScn';击键的行为类似于';Alt+;PrtScrn&x27;
我们需要一个用于单元测试的应用程序截图C# 自动化';PrtScn';击键的行为类似于';Alt+;PrtScrn&x27;,c#,automation,screenshot,sendkeys,C#,Automation,Screenshot,Sendkeys,我们需要一个用于单元测试的应用程序截图CaptureScreen()和CopyFromScreen()以某种方式忽略应用程序并返回空桌面的图片。所以我们写这篇文章是为了伪造一个PrtScn击键: public static Bitmap GetAltScreenshot() { Clipboard.Clear(); SendKeys.SendWait("{PRTSC}"); while (!Clipboard.ContainsImage()) {
CaptureScreen()
和CopyFromScreen()
以某种方式忽略应用程序并返回空桌面的图片。所以我们写这篇文章是为了伪造一个PrtScn
击键:
public static Bitmap GetAltScreenshot()
{
Clipboard.Clear();
SendKeys.SendWait("{PRTSC}");
while (!Clipboard.ContainsImage())
{
Thread.Sleep(500);
}
return new Bitmap(Clipboard.GetImage());
}
Alt
不是击键的一部分,因此应返回整个屏幕的位图。然而,不知何故,这段代码只返回了聚焦窗口。这很好,解决了我们的问题-但我们不知道如何解决
为什么只返回聚焦窗口的快照,而不是整个监视器的快照?事实上有一个“原因”,请转到您可以使用的关键缩写的文档。注意打印屏幕的条目:
{PRTSC}(保留供将来使用)
这是一种有点笨拙的说法,“我们知道它不起作用,也许有一天会解决它”。那一天还没有到来。因此,您可能正在测试该键的故障模式,并且实际上喜欢它的工作方式。这当然是不健康的,他们可能会在某一天解决问题并破坏你的程序
请记下关于可以添加到.config文件的
条目的注释,在同一MSDN页面的下一页。我怀疑,但事实上不知道SendInput方法更可靠。你应该看看:@GeorgeJohnston相信我,我们以前试过使用g.CopyFromScreen
以及我们能找到的所有其他捕获方法。它们在我的机器上都表现良好,但在公司内的其他机器上却给出了奇怪的结果。可能是SendKeys类只是将“{PRTSC}”键字符串解释为Alt+PrtScn键组合吗?另外,您可以手动将焦点设置为整个尖叫声?首先,在发送{PRTSC}之前,您是否尝试过执行一次SendKeys.Flush()
,这是一次很长的尝试,但为了确保队列中没有其他消息,这至少值得排除。@BrianSendKeys.Flush()
没有效果。是的,我知道这个“原因”(事实上,我想你的一篇老帖子给我指出了这个原因),但我或多或少好奇地想知道这个谜团的内部运作。我想这是微软愿意让我们知道的。我真的不知道背后的原因。他们在没有appsetting的情况下使用的日志钩子,呃,很奇怪。