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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5