如何使用我自己的清单文件并将其嵌入到使用Visual Studio 2017的可执行文件中?

时间:2018-09-17 18:09:59

标签: winapi visual-studio-2017 manifest dpi-aware

我正在尝试使用PerMonitorV2 DPI感知,该感知将在更改DPI时调整非客户区的大小。 MSDN文档建议使用清单设置DPI感知模式: Setting the default DPI awareness for a process

VS配置属性的

清单工具部分仅提供了三个DPI意识选项:(不知道),高度DPI意识每个监视器DPI意识< / strong>(似乎是PerMonitorV1),所以我需要找到某种方法来覆盖那些DPI设置,但是我不知道该怎么做。 (我最好的猜测是以某种方式提供我自己的清单文件,而不是依靠Visual Studio生成清单文件。)

1 个答案:

答案 0 :(得分:3)

在清单工具设置中,您可以定义其他清单清单,Visual Studio将与默认清单合并。默认清单仍将提供<dpiAware>标签,以作为不了解<dpiAwareness>标签的旧版OS的后备。

步骤:

  1. 打开项目配置,选择“清单工具”>“输入和输出”。
  2. 在“其他清单文件”字段中,输入要包括的清单片段的文件名。该路径是相对于您的项目文件夹的。

    代码段如下所示。请注意,我MSDN sample中删除了<dpiAware>标记

    <?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>
          <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
        </windowsSettings>
      </application>
    </assembly>
    
  3. 从“ DPI意识”组合框中选择“高DPI意识”。如上所述,这是旧版Windows的后备值。

结果:

这是我使用应用程序向导创建的Win32项目的合并清单。它嵌入在应用程序的资源中。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </windowsSettings>
  </application>
</assembly>

如果您获得两个<dpiAware>标签,则忘记从清单片段中删除<dpiAware>