42

在 Windows 下使用 C++ 截取正在运行的应用程序的最佳(最简单)方法是什么?

4

5 回答 5

30

您必须获取窗口 ( GetWindowDC()) 的设备上下文并从中复制图像 ( BitBlt())。根据您对应用程序的其他了解,您将使用不同的方法来查找要传递到的窗口句柄GetWindowDC()

于 2009-02-10T09:56:02.957 回答
13

GetDC(NULL)+BitBlt()

要捕获半透明/alpha/分层窗口,您必须将CAPTUREBLT标志传递给BitBlt,如果这样做,光标会闪烁,请阅读这篇 technet 文章以找出原因。

在 NT6+ 上,您也许可以使用Magnification API来做您想做的事。

于 2010-04-09T11:37:01.690 回答
3

keybd_event函数文档中,它声明您可以使用它来截取屏幕截图并将其保存到剪贴板。例如:

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);

在我的版本中(我的计算机上安装了 Visual Studio 2005 帮助),它指出您可以通过将第二个参数设置为 0 来截取整个桌面的屏幕截图,或者通过将其设置为 1 来截取当前应用程序的屏幕截图。

将其从剪贴板缓冲区中取出留作读者练习。

但是,在这样做之前我会仔细考虑,因为它会破坏剪贴板中已经存在的任何图像数据。

于 2009-03-03T07:16:07.607 回答
3

这是一个示例代码
, 您可以执行CaptureAnImage(GetDesktopWindow());屏幕截图。

于 2017-08-13T08:42:10.597 回答
-2

桌面是与用户交互的“虚拟”设备。因此,它可能包含与隐私相关的信息。我建议在可执行文件尝试截屏时添加来自操作系统的安全检查/警告提示,除非最终用户明确表示他(她)知道发生了什么。

于 2020-04-14T00:52:21.983 回答