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),它会起作用,但这段代码只是一部分更大的代码,每 800 毫秒执行一次)。

因此,我需要有关如何更可靠地发送密钥或获取 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 回答