繁体   English   中英

为什么在不同的计算机上,CopyFromScreen对于全屏游戏给出不同的结果?

[英]Why does CopyFromScreen give different results for full-screen game on different machines?

我正在使用下面的代码来截取所有活动显示的屏幕截图。

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);

到目前为止,我已经在两台不同的机器上对此进行了测试,当《魔兽世界》以全屏模式运行时,一台机器拍摄了WoW屏幕的图片,另一台机器拍摄了桌面的图片。 如果此代码无法对魔兽世界进行截图,我不会感到惊讶,因为(我假设)它使用DirectX直接将其写入视频卡。 但是,由于它确实可以在某种情况下工作,所以我想知道是否可以更改代码和/或机器配置以使其在所有情况下都能工作。 (至少对于《魔兽世界》。我意识到可能还有很多其他游戏无法使用。)这似乎不是框架版本问题,因为我已经针对不同版本编译了代码,并且行为没有改变。

拍下WoW图片的#1机器正在运行64位Win7 Professional,并安装了.NET Framework 2.0至4.0版本。

带有桌面图片的2号计算机正在运行32位Win7 Home Premium SP1,并且安装了.NET Framework 1.0至4.0。

编辑添加:另一个数据点是,如果将#2机器从Win7 Aero桌面主题切换到“经典”主题,则将开始获取WoW图片而不是桌面图片。

我将通话添加到:

DwmEnableComposition(DWM_EC_DISABLECOMPOSITION); 

按照从Windows Service启用/禁用Aero的答案,可以解决此问题。 但是,我真的不明白为什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM