在 Windows 下使用 C++ 截取正在运行的应用程序的最佳(最简单)方法是什么?
5 回答
您必须获取窗口 ( GetWindowDC()
) 的设备上下文并从中复制图像 ( BitBlt()
)。根据您对应用程序的其他了解,您将使用不同的方法来查找要传递到的窗口句柄GetWindowDC()
。
GetDC(NULL)
+BitBlt()
要捕获半透明/alpha/分层窗口,您必须将CAPTUREBLT
标志传递给BitBlt
,如果这样做,光标会闪烁,请阅读这篇 technet 文章以找出原因。
在 NT6+ 上,您也许可以使用Magnification API来做您想做的事。
在keybd_event函数文档中,它声明您可以使用它来截取屏幕截图并将其保存到剪贴板。例如:
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);
在我的版本中(我的计算机上安装了 Visual Studio 2005 帮助),它指出您可以通过将第二个参数设置为 0 来截取整个桌面的屏幕截图,或者通过将其设置为 1 来截取当前应用程序的屏幕截图。
将其从剪贴板缓冲区中取出留作读者练习。
但是,在这样做之前我会仔细考虑,因为它会破坏剪贴板中已经存在的任何图像数据。
这是一个示例代码
,
您可以执行CaptureAnImage(GetDesktopWindow());
屏幕截图。
桌面是与用户交互的“虚拟”设备。因此,它可能包含与隐私相关的信息。我建议在可执行文件尝试截屏时添加来自操作系统的安全检查/警告提示,除非最终用户明确表示他(她)知道发生了什么。