2013-07-19 10 views
8

単体テストのために私たちのアプリのスクリーンショットが必要です。 CaptureScreen()CopyFromScreen()は何とかアプリを無視し、空のデスクトップの写真を返す。だから我々は偽PrtScnキーストロークにこれを書いた:自動 'PrtScn'キーストロークは 'Alt + PrtScrn'のように動作します

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

Altは、キーストロークの一部ではないので、これは画面全体のビットマップを返す必要があります。しかし、何とかこのスニペットはフォーカスされたウィンドウを返します。それは問題ありませんが、どのようにして解決するのか分かりません。

これは、モニタ全体ではなく、フォーカスされたウィンドウのショットを返すのはなぜですか?

+0

http://stackoverflow.com/questions/5049122/how-to-capture-the-screen-shot-using-net –

+0

@GeorgeJohnston私は 'g.CopyFromScreen'を使って試してみましたか?以前と同様に、私たちが見つけることができる他のすべてのキャプチャ方法。彼らはすべて私のマシンでうまくいったが、会社内の他のマシンでは奇妙な結果を出した。 – 4444

+0

SendKeysクラスがAlt + PrtScnキーの組み合わせを意味する "{PRTSC}"キー文字列を解釈するだけかもしれませんか?また、フォーカスを手動で設定して全体のスクリーンにすることは可能でしょうか? [リンク](http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait.aspx)先頭へ戻る –

答えて

5

実際には「理由」があります。MSDN Library articleには、使用できるキーの略語が記載されています。 PRINTのSCREENのエントリに注意してください。

{PrtScキー}

ザ・私たちは、おそらくいくつかのことを修正します、それは動作しません知っている」というのがやや不器用な方法である(将来の使用のために予約)日"。その日はまだ到着していません。だからおそらく、この鍵の失敗モードをテストしており、実際にはのようなのように動作します。これはもちろん健全ではなく、実際にはいつか問題を解決してプログラムを壊すかもしれません。

注:.configファイルに追加できる、同じMSDNページの下にある<appSettings>エントリについての注意に注意してください。私は、SendInputメソッドがより信頼できると思うが、事実はわからない。

+1

はい、私は「理由」を知っています(実際には、あなたからの古い投稿が私にそこを指摘したと思います)。しかし、私はこの神秘の内部の仕組みを知ることに多かれ少なかれ気づいていました。私はこれがMicrosoftが私たちにこれを知らせてくれるのと同じくらいだと思います。 – 4444

+0

私は根本的な理由を本当に知りません。彼らがappsettingせずに使用するジャーナリングフックは、erm、奇妙です。 –