在电脑上支持高 DPI 显示

为帮助 Windows 10 应用程序和 shell 元素在像素密度不同的显示器上显示为一致的大小,Windows 提供了内置缩放设置。 为使游戏在调整这些缩放设置后正确呈现和处理鼠标输入,需要设置默认 DPI 感知。 如果未能执行此操作,则游戏可能显示错误,使具有高 DPI 显示器的用户无法使用。

启用高 DPI 感知

确保游戏支持高 DPI 显示

  1. 检查游戏可执行文件的程序集清单 XML。 这可以是 titleName.exe(一个清单文件加 titleName.exe),也可以是游戏可执行文件中的嵌入式清单。 可通过命令行使用 sigcheck(如下所示)从游戏可执行文件中提取嵌入式清单。
    sigcheck -m titleName.exe
    
  2. 如果清单 XML 中仅显示以下 <dpiAware> 标记,则不支持高 DPI 显示。
    <windowsSettings>
        <dpiAware>
            true
        </dpiAware>
    </windowsSettings>
    
  3. 嵌入式清单优先于松散清单。 如果存在,请转到步骤 4。 如果没有嵌入式清单,请使用以下内容创建 titleName.exe.manifest 文件。
    <?xml version="1.0" encoding="UTF-8" standlone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="https://schemas.microsoft.com/SMT/2016/WindowsSettings">
                PerMonitorV2
            </dpiAwareness>
        </windowsSettings>
    </application>
    </assembly>
    
  4. 如果存在嵌入式清单,请使用 Windows SDK 中的以下 Mt.exe 工具通过命令行定位到它。
    mt -inputresource:<titleExeFilename> -out:<manifestOutputFilename>
    
  5. 编辑嵌入式清单,添加新的 <dpiAwareness> 标记(如下所示)。
    <windowsSettings>
        <dpiAwareness xmlns="https://schemas.microsoft.com/SMT/2016/WindowsSettings">
            PerMonitorV2
        </dpiAwareness>
    </windowsSettings>
    
  6. 使用 Windows SDK 中的以下 Mt.exe 工具通过命令行更新嵌入式清单。
    mt -updateresource:<titleExeFilename> -manifest <manifestFilename>
    

你的游戏现在支持高 DPI 显示。

验证高 DPI 感知

确认游戏支持高 DPI 显示

  1. 使用支持高 DPI 显示的电脑(例如 Surface Studio 2),导航到“设置”>“显示”,并将缩放比例设置为“150%”。
  2. 启动你的游戏。
  3. 检查光标所在的屏幕,确认游戏显示符合预期。 例如,全屏游戏应占据整个屏幕。
  4. 在屏幕上移动光标,确保其可以到达游戏窗口的整个界面区域。
  5. 将鼠标悬停在交互式 UI 元素(如按钮)上,确认其外观和交互符合预期。 例如,当光标悬停在按钮正上方而不是其旁边时,其外观将会改变。

备注

  • 禁用注册表虚拟化也许可以解决高 DPI 感知问题,但不建议这样做。
  • Visual Studio 的“配置属性”中有“DPI 感知”选项,但选择该选项将使用旧的 <dpiAware> 标记,而该标记不适用于通过 MSIXVC 打包的游戏。

另请参阅

为流程设置默认 DPI 感知