Windows 10 Creator's Update Edition 中为最终用户提供了一个新选项。最终用户可以在兼容性选项卡上将 EXE 的属性更改为“覆盖高 DPI 缩放行为”并将其设置为系统(增强)。我对其进行了测试,它适用于一些经典的 win32 应用程序。
我想通过 API 调用或清单的代码来做到这一点。没有这方面的信息。那可能吗?从我得到的评论中,它想澄清这是一个新的创作者更新功能,我特别想知道如何通过清单或代码为覆盖功能设置“系统(增强)”选项。
Windows 10 Creator's Update Edition 中为最终用户提供了一个新选项。最终用户可以在兼容性选项卡上将 EXE 的属性更改为“覆盖高 DPI 缩放行为”并将其设置为系统(增强)。我对其进行了测试,它适用于一些经典的 win32 应用程序。
我想通过 API 调用或清单的代码来做到这一点。没有这方面的信息。那可能吗?从我得到的评论中,它想澄清这是一个新的创作者更新功能,我特别想知道如何通过清单或代码为覆盖功能设置“系统(增强)”选项。
我在另一篇 SO 帖子中找到了答案: Enhanced system DPI scaling with VS2017
正确的线索是调查在 Creator's Update 中大大改进的新 GDI 缩放清单。用于系统(增强)设置。
没有一个答案或评论接近。他们不停地引用旧文章。此外,有人将问题标记为否定:(悲伤。
DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED 现在是最新的 Windows 10 SDK 标头(撰写本文时为 17134)中的有效 DPI_AWARENESS_CONTEXT,在 windef.h 中:
定义 DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5)
因此,如果您希望避免在清单中执行此操作,则应调用 IsValidDpiAwarenessContext 和 SetProcessDpiAwarenessContext 以在运行时利用 GDI 缩放。
这证实了 gdiScaling 与 Per monitor V2 是互斥的。
此博客文章中介绍了详细信息:
<dpiAware>True/PM</dpiAware>
<dpiAwareness>PerMonitorV2, PerMonitor</dpiAwareness>
有关各种清单问题的更多详细信息,请参阅Manifest Madness