Скриншот перекрытого окна - 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);
}