У нас есть большая программа WinForm C # .Net 4.6, которая время от времени должна получать снимки экрана для целей отладки.В настоящее время мы используем этот код:
private static void DoScreenCapture(string filename)
{
// Determine the size of the "virtual screen", including all monitors.
int screenLeft = SystemInformation.VirtualScreen.Left;
int screenTop = SystemInformation.VirtualScreen.Top;
int screenWidth = SystemInformation.VirtualScreen.Width;
int screenHeight = SystemInformation.VirtualScreen.Height;
// Create a bitmap of the appropriate size to receive the screenshot.
using (Bitmap bmp = new Bitmap(screenWidth, screenHeight))
{
// Draw the screenshot into our bitmap.
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(screenLeft, screenTop, 0, 0, bmp.Size);
}
// Stuff the bitmap into a file
bmp.Save(filename, Imaging.ImageFormat.Png);
}
}
Этот код делает все, что мы хотим, кроме случаев, когда пользователь масштабирует свои мониторы.
Я смотрел на связки статей переполнения стека.Большинство из них предоставляют код, который у нас уже есть, но он не решает проблему масштабирования монитора.Например:
Сделайте снимок экрана нескольких рабочих столов со всеми видимыми приложениями и формами
В некоторых статьях Stack Overflow указывается, что информирование нашего приложения о DPI решит проблему.Да, было бы, но это больше, чем мы можем решить сегодня.Например:
Снимок экрана Windows с масштабированием
Существует также код, который будет выполнять захват всех мониторов по одному, но мы предпочитаем иметь всемониторы, снятые на одном и том же изображении.
Может кто-нибудь дать мне фрагмент кода C #, который сделает снимок экрана с несколькими мониторами с различными коэффициентами масштабирования?
Например, если у меня три идентичных 1920x1080контролирует и размещает их слева направо с крайним левым монитором на 175%, центральным монитором на 100% и крайним правым монитором на 150%, тогда это будет скриншот, который я хочу:
Ожидаетсяснимок экрана
Но это скриншот, который создает мой текущий код.Обратите внимание, что в крайнем правом мониторе отсутствует фрагмент в крайнем правом углу.
Фактический снимок экрана