PrintScreen源代码/模拟



我想拍一张全屏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使用的方法的想法。

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;
}

相关内容

  • 没有找到相关文章

最新更新