我正在开发一个必须截取全屏游戏截图的应用程序。问题是我尝试了很多方法,但是当游戏处于全屏模式时,它们中的任何一个都能够截取屏幕截图,它只会截取游戏下方的内容和左上角的黑色矩形。
有没有其他不涉及挂钩的方法来实现这个目标?因为我正在使用 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 才能使此代码正常工作,或者它只会截取我之前所说的游戏内容的屏幕截图。