【问题标题】:Programmatically override the High DPI awareness以编程方式覆盖高 DPI 意识
【发布时间】:2018-08-26 05:54:41
【问题描述】:

Windows 10 Creator's Update Edition 中为最终用户提供了一个新选项。最终用户可以将兼容性选项卡上的 EXE 属性更改为“覆盖高 DPI 缩放行为”并将其设置为系统(增强)。我对其进行了测试,它适用于一些经典的 win32 应用程序。

我想通过 API 调用或清单通过代码来执行此操作。没有这方面的信息。那可能吗? 从我得到的评论中,它想澄清这是一个新的创作者更新功能,我特别想知道如何通过清单或代码为覆盖功能设置“系统(增强)”选项。

【问题讨论】:

  • 这方面的信息太多了,google "dpiaware manifest"。 Here is one.
  • 不是真的,不是关于如何设置最终用户获得的特定系统(增强)设置。
  • 您的链接指向一篇旧文章。这个“系统(增强)”功能是创作者更新中的最新功能,似乎没有清单或 API。
  • 那篇文章我最初是为了了解这个功能而阅读的。但它仅描述了最终用户使用 System (Enhanced) 的解决方案。它没有在 Manifest 中给出与它等效的内容。

标签: windows-10 manifest highdpi creators-update


【解决方案1】:

详情见this blog post:

<dpiAware>True/PM</dpiAware>
<dpiAwareness>PerMonitorV2, PerMonitor</dpiAwareness>

有关各种清单问题的更多详细信息,请参阅Manifest Madness

【讨论】:

  • 这适用于 DPI Aware 应用程序。新的“系统(增强)”功能使 DPI Unaware 应用程序在高 DPI 上运行良好。无论如何,我已经接近解决方案并将发布答案。
【解决方案2】:

我在另一个 SO 帖子中找到了答案: Enhanced system DPI scaling with VS2017

正确的线索是调查在 Creator's Update 中大大改进的新 GDI 缩放清单。用于系统(增强)设置。

没有一个答案或 cmets 接近。他们不停地引用旧文章。此外,有人将这个问题标记为否定:(悲伤。

【讨论】:

    【解决方案3】:

    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 是互斥的。

    【讨论】:

    • 谢谢。正是我想要的。
    • 在C#中通过SetProcessDpiAwarenessContext API调用使用这个时,DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED对应的值是多少?
    • @FoundWaldoException 它是 -5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2020-07-28
    • 2021-05-10
    • 2014-12-10
    • 2012-02-27
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多