Я разрабатываю приложение, которое должно делать скриншоты полноэкранной игры. Проблема в том, что я пробовал много способов, но любой из них может сделать снимок экрана, когда игра находится в полноэкранном режиме, он просто сделает снимок экрана с тем, что находится под игрой, и черный прямоугольник в верхнем левом углу.
Есть ли альтернатива для достижения этой цели, которая не связана с перехватом? Поскольку я использую C #, что является плохим языком для подобных вещей.
Это мой код прямо сейчас:
Bitmap bmp = null;
SIZE size;
size.cx = Screen.PrimaryScreen.Bounds.Width;
size.cy = Screen.PrimaryScreen.Bounds.Height;
IntPtr Src = PlatformInvokeUSER32.GetDC(IntPtr.Zero);
IntPtr Dest = PlatformInvokeGDI32.CreateCompatibleDC(Src);
IntPtr HBitmap = (IntPtr)null;
IntPtr hOld = IntPtr.Zero;
HBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap(Src, size.cx, size.cy);
hOld = (IntPtr)PlatformInvokeGDI32.SelectObject(Dest, HBitmap);
PlatformInvokeGDI32.BitBlt(Dest, 0, 0, size.cx, size.cy, Src, 0, 0, (PlatformInvokeGDI32.SRCCOPY|PlatformInvokeGDI32.CAPTUREBLT));
bmp = System.Drawing.Image.FromHbitmap(HBitmap);
PlatformInvokeGDI32.DeleteDC(Dest);
PlatformInvokeUSER32.ReleaseDC(IntPtr.Zero.GetDesktopWindow(), Src);
PlatformInvokeGDI32.DeleteObject(HBitmap);
Это нормально работает в XP, но когда дело доходит до Vista / 7, мне нужно отключить Aero, чтобы этот код работал, либо он просто сделает снимок экрана с тем, что находится под игрой, как я уже говорил.