我尝试了所有可能的gdiScaling
和dpiAware
的组合,仍然没有运气。
如果我手动右键单击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>
试试这个清单:
<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 code与SetProcessDpiAwarenessContext函数和DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED
which在"Include\10.0.BUILDNUMBER.0\shared\windef.h"
中定义为
#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5)
<?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
是缺少标签的默认值,我认为相信SetProcessDpiAware
或SetProcessDpiAwareness
被某种东西调用。检查strings
以确认您没有引用SetProcessDpiAware
。
在你创建第一个窗口之前,你可以通过打电话给SetProcessDpiAwareness(PROCESS_DPI_UNAWARE);
来尝试着火。不过这是一个坏主意。
所有信息均来自MSDN Setting the default DPI awareness for a process,MSDN SetProcessDPIAwareness以及处理此材料的个人经验。