Скриншот перекрытого окна - C#
Формулировка задачи:
Задача: получить изображение из перекрытого окна игры
Наблюдения: при перекрытии окна другим, на фоне продолжается полноценная отрисовка, изображение не замирает, режим оконный (полноэкранный без рамки)
Проблема: скриншот ловит чёрный экран
Разрешение выводится правильное, скриншоты других окон ловятся нормально. В чём трабла?
Bitmap bmp = new Bitmap(s.Width, s.Height); Graphics g = System.Drawing.Graphics.FromImage(bmp); IntPtr dc1 = g.GetHdc(); IntPtr dc2 = GetDC(Handle); bool success = PrintWindow(Handle, dc2, 0); if (!success) { MessageBox.Show("Неудача!"); return; } MessageBox.Show(string.Format("{0} {1}", s.Width, s.Height)); BitBlt(dc1, 0, 0, s.Width, s.Height, dc2, 0, 0, TernaryRasterOperations.SRCCOPY); g.ReleaseHdc(dc1); bmp.Save("screen.bmp"); bmp.Dispose();
Решение задачи: «Скриншот перекрытого окна»
textual
Листинг программы
class User32 { [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } [DllImport("user32.dll")] public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")] public static extern IntPtr GetWindowDC(IntPtr hWnd); [DllImport("user32.dll")] public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("user32.dll")] public static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д