与 DPI 相关的 API 和注册表设置

来源:互联网 发布:软件项目实施心得体会 编辑:程序博客网 时间:2024/04/30 01:09


VisualStudio中有修改DPI功能的设置部分,

更新时间: 2013年10月

应用到: Windows 8.1

如果你需要执行部署自定义,以下部分说明了安装后脚本可能需要访问的注册表项和系统参数。

本主题内容:

  • 主显示器原始分辨率

  • 主显示器 DPI 比例系数

  • 缩放模式

  • Windows 8.1 缩放模式中的缩放覆盖

  • Windows 8 缩放模式中的系统范围比例系数

  • 125% 显示器的最简单缓解

  • 150% 显示器的缓解

主显示器原始分辨率

表 1 Windows 8.1 缩放级别提供了有关大量常见显示器的 Windows 8.1 缩放级别的信息,但并不详尽。面板 DPI 表示面板的物理像素密度,缩放级别表示将用于此显示器的比例系数。

表 1 Windows 8.1 缩放级别

 

显示大小显示分辨率水平(像素)垂直(像素)面板 DPI缩放级别

10.6"

FHD

1920

1080

208

150%

10.6"

HD

1366

768

148

100%

11.6"

WUXGA

1920

1200

195

150%

11.6"

HD

1366

768

135

100%

13.3"

WUXGA

1920

1200

170

150%

13.3"

QHD

2560

1440

221

200%

13.3"

HD

1366

768

118

100%

15.4"

FHD

1920

1080

143

125%

15.6"

QHD+

3200

1800

235

200%

17"

FHD

1920

1080

130

125%

23”

QFHD (4K)

3840

2160

192

200%

24"

QHD

2560

1440

122

125%

若要以编程模式查找任何设备的这一信息,你可以编写用于报告数据的实用程序。使用适用于桌面以及 HORZRES 和 VERZRES 索引的 HDC,通过调用 APIGetDeviceCaps() 函数检索原始主分辨率:

复制
// Get desktop dcdesktopDc = GetDC(NULL);// Get native resolutionhorizontalResolution = GetDeviceCaps(desktopDc,HORZRES);verticalResolution = GetDeviceCaps(desktopDc,VERZRES);

有关 GetDC 的详细信息,请参阅 GetDC() 函数。

主显示器 DPI 比例系数

同样,你可以使用 LOGPIXELSX 和 LOGPIXELSY 索引获取像素密度:

复制
// Get desktop dcdesktopDc = GetDC(NULL);// Get native resolutionhorizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);

这些结果将在坐标系统中返回,其中 96 对应 100%,如表 2 DPI 比例系数中所示。

表 2 DPI 比例系数

 

DPI比例系数

96

100

120

125

144

150

192

200

note备注此 API 将始终返回 96,除非将调用它的工具注册为 DPI 感知。这需要将以下 XML 添加到实用程序的清单。

复制
<asmv3:application>    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">      <dpiAware>Per monitor</dpiAware>    </asmv3:windowsSettings>  </asmv3:application>

有关此清单设置的详细信息,请参阅 SetProcessDPIAware 函数。

缩放模式

“控制面板\外观和个性化\显示”用户界面 (UI) 包括一个复选框:“让我为所有显示器选择一个缩放级别”,该复选框控制系统是向所有显示器应用单个比例系数(与 Windows(R) 8 和早期版本的 Windows 相同),还是应用考虑了每个显示器像素密度的不同比例系数(默认 Windows 8.1)。此复选框在 Windows 8.1 中配置HKCU\Control Panel\Desktop\Win8DpiScaling 注册表项。

表 3 HKCU\Control Panel\Desktop\Win8DpiScaling 值

 

项值意义

0

针对每个显示器使用不同的比例系数:从一个显示器移动到另一个显示器的 Windows 8.1 default.Content 将是合适的大小,但是可以进行位图缩放。

1

针对所有显示器应用相同的比例系数:从一个显示器移动到另一个显示器的 Windows 8 和 Windows 较早版本的 behavior.Content 可能是错误的大小。

Windows 8.1 缩放模式中的缩放覆盖

当清除“让我为所有显示器选择一个缩放级别”复选框且系统在 Windows 8.1 缩放模式中运行时,将为用户提供一个滑块,允许他们覆盖当前比例系数(从较小到中等再到较大)。 此设置在HKCU\Control Panel\Desktop\DesktopDPIOverride 注册表中配置。

表 4 HKCU\Control Panel\Desktop\DesktopDPIOverride 值

 

项值意义

<0

从默认值开始,以该值为单位量减少每个显示器比例系数(例如,如果默认值为 150% 缩放,则 -1 对应 125%,-2 对应 100%)。

0

为每个显示器使用默认值。

0>

以该值为增量,增加每个显示器系数(使用之前的示例,+1 对应 200% 缩放)。

此模式中的所有显示器比例系数都限制为以下四个值之一:100%、125%、150%、200%。此外,应用缩放后,应用程序预期至少具有 720 线有效分辨率(即按比例系数划分的显示器的物理垂直分辨率);这可以进一步限制允许的显示器比例系数范围。表 5 显示器值显示了不同大小的显示器允许使用哪些值:

表 5 显示器值

 

竖线支持的比例系数

<900

100%

>= 900 和 <1080

100%、125%

>=1080 和 <1440

100%、125%、150%

>=1440

100%、125%、150%、200%

Windows 8 缩放模式中的系统范围比例系数

当选中“让我为所有显示器选择一个缩放级别”复选框时,用户可以指定一个适用于所有显示器的比例系数,无论每个显示器的像素密度如何都是如此。通过使用自定义设置,用户可以选择 100%、125%、150%、200% 之外的值,尽管这些值的范围限制在 100%-500% 之间。此设置在HKCU\ControlPanel\Desktop\LogPixels 注册表中配置。

表 6 HKCU\Control Panel\Desktop\LogPixels 值

 

项值意义

96

在每个显示器上 100% 缩放

120

在每个显示器上 125% 缩放

144

在每个显示器上 150% 缩放

192

在每个显示器上 200% 缩放

<其他>

在每个显示器上 <其他>*100/96 缩放

125% 显示器的最简单缓解

最简单的通用修补程序是将系统放置在比例系数为 125% 的单个比例系数模式中。除非企业环境包含大量非 DPI 感知和在 125% 上缩放较差的应用,否则不建议此操作。 在伪代码中,该操作如下所示:

复制
If (verticalResolution < 1080) and (DPI == 125%)Set HKCU\...\Win8DPIScaling to 1Set HKCU\...\LogPixels to 120Require logoff/logon

150% 显示器的缓解

对于像素更密集的显示器,可以使用之前部分中描述的相同方法。不建议将此操作用作常规做法。除了禁用 Windows 8.1 DPI 功能优势之外,它还将导致显示内容明显小于最佳大小。因此,我们建议仅用户能自定义这些设备上的 DPI 缩放。

0 0
原创粉丝点击