以编程方式或使用清单(MinGW)将“覆盖高DPI缩放”设置为“系统(增强型)”

问题描述 投票:2回答:2

我尝试了所有可能的gdiScalingdpiAware的组合,仍然没有运气。

如果我手动右键单击app.exe并将“Override high DPI scaling”设置为“System(Enhanced)”,则效果很好。

<assembly xmlns="urn:schemas-microsoft-com:asm.v1"  xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0">
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">
      <gdiScaling>true</gdiScaling>
      <dpiAware>False</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>

</assembly>
c winapi mingw manifest highdpi
2个回答
1
投票

试试这个清单:

<asmv3:application>
   <asmv3:windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
        <gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
   </asmv3:windowsSettings>
</asmv3:application>

它是从Windows 10 1809的MMC.exe中删除的hosts device manager and this must work

默认情况下,Microsoft管理控制台(mmc.exe)将在创建者更新中进行GDI缩放。这意味着许多内置Windows管理单元(例如设备管理器)将受益于Creators Update中的此功能。

如果这也不起作用,启用它via codeSetProcessDpiAwarenessContext函数和DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALEDwhich在"Include\10.0.BUILDNUMBER.0\shared\windef.h"中定义为

#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED    ((DPI_AWARENESS_CONTEXT)-5)

0
投票
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware>false</dpiAware>
    </windowsSettings>
</application>
</assembly>

并确保你根本没有dpiAwareness标签。检查清单合并; strings适用于检查最终二元的清单。 dpiAware标记内容区分大小写。然而,由于false是缺少标签的默认值,我认为相信SetProcessDpiAwareSetProcessDpiAwareness被某种东西调用。检查strings以确认您没有引用SetProcessDpiAware

在你创建第一个窗口之前,你可以通过打电话给SetProcessDpiAwareness(PROCESS_DPI_UNAWARE);来尝试着火。不过这是一个坏主意。

所有信息均来自MSDN Setting the default DPI awareness for a processMSDN SetProcessDPIAwareness以及处理此材料的个人经验。

© www.soinside.com 2019 - 2024. All rights reserved.