我想拍一张全屏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使用的方法的想法。
发布于 2011-08-31 23:50:25
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;
}https://stackoverflow.com/questions/7259293
复制相似问题