2

我正在开发一个必须截取全屏游戏截图的应用程序。问题是我尝试了很多方法,但是当游戏处于全屏模式时,它们中的任何一个都能够截取屏幕截图,它只会截取游戏下方的内容和左上角的黑色矩形。

有没有其他不涉及挂钩的方法来实现这个目标?因为我正在使用 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 才能使此代码正常工作,或者它只会截取我之前所说的游戏内容的屏幕截图。

4

0 回答 0