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 dc desktopDc = GetDC(NULL); // Get native resolution horizontalResolution = GetDeviceCaps(desktopDc,HORZRES); verticalResolution = GetDeviceCaps(desktopDc,VERZRES);
有关 GetDC 的详细信息,请参阅 GetDC() 函数。
同样,你可以使用 LOGPIXELSX 和 LOGPIXELSY 索引获取像素密度:
// Get desktop dc desktopDc = GetDC(NULL); // Get native resolution horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX); verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);
这些结果将在坐标系统中返回,其中 96 对应 100%,如表 2 DPI 比例系数中所示。
表 2 DPI 比例系数
DPI | 比例系数 |
---|---|
96 | 100 |
120 | 125 |
144 | 150 |
192 | 200 |
![]() |
---|
此 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 缩放模式中运行时,将为用户提供一个滑块,允许他们覆盖当前比例系数(从较小到中等再到较大)。 此设置在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% |
当选中“让我为所有显示器选择一个缩放级别”复选框时,用户可以指定一个适用于所有显示器的比例系数,无论每个显示器的像素密度如何都是如此。通过使用自定义设置,用户可以选择 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% 的单个比例系数模式中。除非企业环境包含大量非 DPI 感知和在 125% 上缩放较差的应用,否则不建议此操作。 在伪代码中,该操作如下所示:
If (verticalResolution < 1080) and (DPI == 125%) Set HKCU\...\Win8DPIScaling to 1 Set HKCU\...\LogPixels to 120 Require logoff/logon
对于像素更密集的显示器,可以使用之前部分中描述的相同方法。不建议将此操作用作常规做法。除了禁用 Windows 8.1 DPI 功能优势之外,它还将导致显示内容明显小于最佳大小。因此,我们建议仅用户能自定义这些设备上的 DPI 缩放。