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