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 ライブラリの記事を参照してください。PRINT SCREEN のエントリに注意してください。

{PRTSC} (将来の使用のために予約済み)

これは、「うまくいかないことはわかっています。いつか修正されるかもしれません」というややぎこちない言い方です。その日はまだ来ていません。したがって、おそらくこのキーの障害モードをテストしていて、実際にその機能が気に入っているでしょう。もちろん、これは健全ではありません。実際に問題が修正され、プログラムが壊れる可能性があります。

<appSettings>同じMSDNページのさらに下にある、.configファイルに追加できるエントリに関するメモに注意してください。SendInput メソッドの方が信頼性が高いと思いますが、事実はわかりません。

于 2013-07-22T16:28:17.760 に答える