2012-01-20 8 views
1

以下のコードを使用して、アクティブなすべてのディスプレイのスクリーンショットを取ります。CopyFromScreenは、異なるマシンでフルスクリーンゲームの結果が異なるのはなぜですか?

Rectangle totalSize = Rectangle.Empty; 

foreach (Screen s in Screen.AllScreens) 
    totalSize = Rectangle.Union(totalSize, s.Bounds); 

Bitmap screenShotBMP = new Bitmap(
    totalSize.Width, totalSize.Height, 
    PixelFormat.Format32bppArgb); 

Graphics screenShotGraphics = Graphics.FromImage(
    screenShotBMP); 

screenShotGraphics.CopyFromScreen(
    totalSize.Location.X, 
    totalSize.Location.Y, 
    0, 0, totalSize.Size, 
    CopyPixelOperation.SourceCopy); 

私はこれまで二つの異なるマシン上でこれをテストしてみた、とWorld of Warcraftのは、フルスクリーンを実行しているとき、一台のマシンがすごい画面の画像を取り、もう一つはデスクトップの写真を撮ります。私はこのコードが決してのスクリーンショットを取るために働いた場合、私はそれがDirectXをビデオカードに直接書き込むために使用するので、驚いたことはありませんでした。しかし、が1つのケースで動作するため、すべてのケースで動作するように、コードやマシン構成で変更できるものがあるかどうかを知りたいと思います。 (少なくとも、私はおそらく他の多くのゲームが動作しないことに気づいています。)フレームワークのバージョンの問題ではないようです。異なるバージョンに対して自分のコードをコンパイルしたので、動作は変わりません。

WoW画像を取得するMachine#1は、64ビットWin7 Professionalを実行しており、.NET Frameworkバージョン2.0〜4.0がインストールされています。

デスクトップイメージを取るMachine#2は、.NET Frameworkバージョン1.0から4.0をインストールした32ビットWin7 Home Premium SP1を実行しています。

編集者:別のデータポイントは、マシン#2をWin7 Aeroデスクトップテーマから「クラシック」テーマに切り替えると、デスクトップピクチャの代わりにWoWピクチャを取得することです。

+0

Wow自体がビデオ設定のように2台のマシンで異なる設定をしている可能性はありますか? –

+0

私はちょうどチェックし、WoWは両方のマシン上の32ビットアプリケーションです。プログラムが32ビットサブシステムで動作しているため、64ビットCLRはビデオをキャプチャできるという説明がありますか? – jeffm

+0

私は、適切なグラフィックスアクセラレータがドライバと共にインストールされ、ゲームが全画面で実行されている場合、ゲームはビデオメモリに直接書き込むと思う。 – Jodrell

答えて

1

私はへの呼び出しを追加しました:Enabling/Disabling Aero from a Windows Serviceへの答えどおり

DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); 

、それが問題を修正します。私はなぜ、しかし、本当に理解していない。

関連する問題