在 C# WinForm 中 window 后面截图
Take a screenshot behind window in C# WinForm
我正在使用 c# windows 表单开发一个应用程序,我有一个名为 Form1 的表单和一个按钮,在单击此按钮后,我的想法是截屏它后面的所有内容,但 Form1 除外本身(不最小化 Form1)。
有什么想法或建议吗?
谢谢!
你可以使用硬编码。实际上,light shot 和其他工具可以正常工作,例如。当您点击屏幕截图按钮时,您可以在活动结束后关闭表单 window 并重新打开它。这是解决问题的基本方法......
请这样检查:How can i capture the screen without the Form?
如果你想要一个没有隐藏、移动、最小化等的解决方案,你需要以下方法:
- EnumWindows() 迭代所有 windows。这将为您提供从上到下的 windows。
- 别忘了排除你自己的 window
- 排除 windows 不可见的。查看 GetWindowLongPtr 和
GWL_STYLE
并与 WS_VISIBLE
进行比较
- GetWindowRect() 得到他们的尺寸
- PrintWindow()获取window的位图,不管是否在后台
- 创建大小为 VirtualScreen
的位图
- 使用 DrawImage()
以相反的顺序(从下到上)绘制 windows
我发现这相当快(在 2560x1440 屏幕上 514 毫秒,要绘制 20 个可见 windows)。
限制:
- 由于它向应用程序发送 WM_PRINT 消息,因此您无法捕获“未响应”的应用程序
- 对我来说,Firefox 渲染效果不佳。缺少页面内容。
- 对我来说,控制面板内容显示为黑色,尽管在获取整个屏幕的屏幕截图时它就在那里。
我正在使用 c# windows 表单开发一个应用程序,我有一个名为 Form1 的表单和一个按钮,在单击此按钮后,我的想法是截屏它后面的所有内容,但 Form1 除外本身(不最小化 Form1)。
有什么想法或建议吗?
谢谢!
你可以使用硬编码。实际上,light shot 和其他工具可以正常工作,例如。当您点击屏幕截图按钮时,您可以在活动结束后关闭表单 window 并重新打开它。这是解决问题的基本方法...... 请这样检查:How can i capture the screen without the Form?
如果你想要一个没有隐藏、移动、最小化等的解决方案,你需要以下方法:
- EnumWindows() 迭代所有 windows。这将为您提供从上到下的 windows。
- 别忘了排除你自己的 window
- 排除 windows 不可见的。查看 GetWindowLongPtr 和
GWL_STYLE
并与WS_VISIBLE
进行比较
- GetWindowRect() 得到他们的尺寸
- PrintWindow()获取window的位图,不管是否在后台
- 创建大小为 VirtualScreen 的位图
- 使用 DrawImage() 以相反的顺序(从下到上)绘制 windows
我发现这相当快(在 2560x1440 屏幕上 514 毫秒,要绘制 20 个可见 windows)。
限制:
- 由于它向应用程序发送 WM_PRINT 消息,因此您无法捕获“未响应”的应用程序
- 对我来说,Firefox 渲染效果不佳。缺少页面内容。
- 对我来说,控制面板内容显示为黑色,尽管在获取整个屏幕的屏幕截图时它就在那里。