Я использую приведенный ниже код, чтобы сделать снимок экрана всех активных дисплеев в сочетании.Почему 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);
Я проверил это на двух разных машинах до сих пор, и когда Мир Warcraft работает в полноэкранном режиме одна машина делает снимок экрана WoW, а другой делает снимок рабочего стола. Я бы не удивился, если бы этот код никогда не работал, чтобы сделать снимок экрана WoW, потому что (я полагаю) он использует DirectX для прямой записи на видеокарту. Однако, поскольку он делает, работайте в одном случае, я хотел бы знать, есть ли что-то, что я могу изменить в коде и/или конфигурации машины, чтобы он работал во всех случаях. (По крайней мере, для WoW. Я понимаю, что, вероятно, есть много других игр, которые не будут работать.) Это не похоже на проблему с версией фреймворка, поскольку я скомпилировал свой код для разных версий, и поведение не меняется ,
Машина № 1, которая принимает изображение WoW, работает с 64-разрядным Win7 Professional и имеет версии .NET Framework версии 2.0 до 4.0.
Машина №2, на которой снимается рабочий стол, запускается 32-разрядная версия Win7 Home Premium SP1 с установленными версиями .NET Framework версии 1.0 до 4.0.
Отредактировано для добавления: Еще одна точка данных заключается в том, что если я переключу Machine # 2 с темы рабочего стола Win7 Aero на «классическую» тему, я начну получать WoW-изображения вместо изображений на рабочем столе.
Возможно ли, что Wow имеет другую конфигурацию на двух машинах, например, настройки видео? –
Я только что проверил, и WoW - это 32-битное приложение на обеих машинах. Может ли объяснение, что, поскольку программа работает в 32-битной подсистеме, 64-разрядная среда CLR может захватить ее видео? – jeffm
Я думаю, что игры будут записываться непосредственно в видеопамять, если соответствующий графический ускоритель установлен с драйверами, а игра работает в полноэкранном режиме. – Jodrell