1

我正在尝试使用基于https://www.codeproject.com/Articles/607288/Screenshot-using-the-Magnification-library?msg=5570528#xx5570528xx中给出的代码示例的 Windows 放大 API 捕获桌面屏幕。

该程序(32 位可执行文件)在 Windows8 和 Windows10 上运行良好,但在 Windows7 操作系统上失败。我将程序编译为 64 位,即使对于上述代码项目线程中提到的示例程序,其行为也是相同的。

调试后,我发现MagImageScalingCallback函数将图像宽度和高度返回为 4*4 而不是显示器的大小,这会导致程序在 Windows7 机器上崩溃或捕获空白屏幕(参考:https ://docs.microsoft.com /en-us/windows/desktop/api/magnification/ns-magnification-tagmagimageheader)。

所有 API 调用(MagInitialize、CreateWindow、MagSetWindowFilterListMagSetWindowSource)均成功。在初始化创建、设置桌面区域和分配过滤器列表方面,代码流中没有 API 调用失败或错误。

DWM(航空主题)已关闭(根据参考:https ://docs.microsoft.com/en-us/windows/desktop/api/magnification/nf-magnification-magsetimagescalingcallback )

即使在研究了大约 3 天后,我也找不到与该主题相关的任何资源。我必须使用放大 API,因为我需要捕获留在桌面上其他窗口之后的窗口。

任何帮助,将不胜感激。

更新1:

我发现应用程序只有在启用 Aero 主题时才能捕获屏幕,这与https://docs.microsoft.com/en-us/windows/desktop/api/magnification/nf-magnification中的声明相矛盾-magsetimagescalingcallback

我不确定如何使其在默认禁用 Aero 主题或不可用的操作系统上运行。

4

0 回答 0