通过编程方式或使用清单(MinGW)将“替代高DPI缩放比例”设置为“系统(增强)”

时间:2019-03-21 09:57:00

标签: c winapi mingw manifest highdpi

我尝试了ZkUtilsgdiScaling的所有可能组合,但还是没有运气。

如果我手动右键单击app.exe,并将“覆盖DPI高比例缩放”设置为“系统(增强)”,则效果很好。

dpiAware

3 个答案:

答案 0 :(得分: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   管理单元(例如设备管理器)将从此功能中受益   创作者更新。

如果这仍然行不通,请使用via code函数和DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED"Include\10.0.BUILDNUMBER.0\shared\windef.h"中定义为{p>

#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED    ((DPI_AWARENESS_CONTEXT)-5)

答案 1 :(得分: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和处理此材料的个人经验。

答案 2 :(得分:0)

确保您的清单ID为1。我设法通过名为win32opengl.exe的.exe将其与Dev-C ++ 5.11 / MinGW 4.9.2配合使用。这是我的文件内容:

resource.h

#ifndef RESOURCE_H
#define RESOURCE_H
#define ID_MANIFEST 1
#endif

resource.rc

#include "resource.h"
ID_MANIFEST 24  "win32opengl.exe.manifest"

win32opengl.exe.manifest

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>