0

フルスクリーンの direct3D ゲームの写真を撮りたいです。C# では難しい「オーバーレイ」を作成する必要があることはわかっていますが、printscreen を使用すると (mspaint に貼り付けるより)、ゲーム ウィンドウをキャプチャできることがわかりました。

私はこの不安定なコードで終わった:

            try
            {
                SendKeys.SendWait("{PRTSC}");
                Thread.Sleep(100);
                if (Clipboard.ContainsImage())
                    return Clipboard.GetImage();
            }
            catch (Exception)
            {
                throw;
            }
            Bitmap bitmap = new Bitmap(1, 1);
            return bitmap;

このコードは機能する場合もあれば、ExternalException をスローする場合もあれば、Clipboard.ContainsImage() が false を返す場合もあり、1,1 サイズの画像を返すだけです。

そのコードを試して改善したいので、何かをクリップボードにコピーするのにかかる時間に頼る必要はありません (thread.sleep(20000) を使用すると動作しますが、このコードは800ms ごとに実行されるより大きなコード)。

したがって、キーをより確実に送信する方法、または printscreen が使用する方法を取得する方法についてのアイデアが必要です。

4

1 に答える 1

0
public static class Win32
{
    [DllImport("User32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
}

public Bitmap CaptureWindow()
{
    Bitmap bmp = new Bitmap(this.Width,this.Height);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        Win32.PrintWindow(this.Handle, g.GetHdc(), 0);
        g.ReleaseHdc();
    }
    return bmp;
}
于 2011-08-31T15:50:24.753 に答える