首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PrintScreen源代码/仿真

PrintScreen源代码/仿真
EN

Stack Overflow用户
提问于 2011-08-31 23:19:30
回答 1查看 2.1K关注 0票数 0

我想拍一张全屏direct3D游戏的照片。我知道我需要创建一个“叠加”,这在c#中比较难,我发现使用printscreen (而不是粘贴到mspaint中)确实可以捕获游戏窗口。

我最终得到了这个不稳定的代码:

代码语言:javascript
复制
            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使用的方法的想法。

EN

回答 1

Stack Overflow用户

发布于 2011-08-31 23:50:25

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7259293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档