Я использую код ниже, чтобы сделать скриншот всех активных дисплеев вместе взятых.
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 работает в полноэкранном режиме, одна машина делает снимок экрана 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 вместо изображений рабочего стола.