![](/img/trans.png)
[英]what is the best way to detect the source of buffer overflow in c++ for windows?
[英]What is the best way to take screenshots of a Window with C++ in Windows?
在 Windows 下使用 C++ 截取正在运行的应用程序的屏幕截图的最佳(最简单)方法是什么?
您必须获取窗口的设备上下文( GetWindowDC()
)并从中复制图像( BitBlt()
)。 根据您对应用程序的了解,您将使用不同的方法来查找要传递给GetWindowDC()
窗口句柄。
GetDC(NULL)
+ BitBlt()
要捕获半透明/alpha/分层窗口,您必须将CAPTUREBLT
标志传递给BitBlt
,如果这样做,光标会闪烁,请阅读此技术网文章以找出原因。
在 NT6+ 上,您或许可以使用Magnification API来做您想做的事。
在keybd_event函数文档中,它声明您可以使用它来截取屏幕截图并将其保存到剪贴板。 例如:
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);
在我的版本(安装在我的计算机上的 Visual Studio 2005 帮助)中,它指出您可以通过将第二个参数设置为 0 来截取整个桌面的屏幕截图,或者通过将其设置为 1 来截取当前应用程序的屏幕截图。
从剪贴板缓冲区中取出它作为练习留给读者。
但是,在执行此操作之前我会仔细考虑,因为它会覆盖剪贴板中已经存在的任何图像数据。
这是一个示例代码
你可以做CaptureAnImage(GetDesktopWindow());
进行屏幕截图。
桌面是与用户交互的“虚拟”设备。因此,它可能包含与隐私相关的信息。 我建议在可执行文件尝试截取屏幕截图时添加来自操作系统的安全检查/警告提示,除非最终用户明确表示他(她)知道发生了什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.