8

我们需要我们的应用程序的屏幕截图来进行单元测试。CaptureScreen()CopyFromScreen()以某种方式忽略该应用程序并返回空桌面的图片。所以我们写了这个来伪造PrtScn击键:

public static Bitmap GetAltScreenshot()
{
    Clipboard.Clear();
    SendKeys.SendWait("{PRTSC}");
    while (!Clipboard.ContainsImage())
    {
        Thread.Sleep(500);
    }
    return new Bitmap(Clipboard.GetImage());
}

Alt不是击键的一部分,所以这应该返回整个屏幕的位图。然而不知何故,这个片段只返回了焦点窗口。这很好,这解决了我们的问题 - 但我们不明白如何。

为什么这只会返回聚焦窗口的镜头,而不是整个显示器?

4

1 回答 1

8

实际上有一个“原因”,请参阅MSDN Library 文章,该文章记录了您可以使用的关键缩写。注意 PRINT SCREEN 的条目:

{PRTSC}(保留供将来使用)

这是一种有点笨拙的说法:“我们知道它不起作用,也许有一天会解决这个问题”。那一天还没有到来。因此,您可能正在测试此密钥的故障模式,并且实际上喜欢它的工作方式。这当然是不健康的,他们可能有一天会真正解决问题并破坏您的程序。

请注意有关<appSettings>可以添加到 .config 文件中的条目的注释,在同一 MSDN 页面的下方。我怀疑,但不知道,SendInput 方法更可靠。

于 2013-07-22T16:28:17.760 回答