DPI 相关的 API 和注册表设置
如果需要执行部署自定义,以下部分说明了安装后脚本可能需要访问的注册表项和系统参数。
本文内容:
主显示器本机分辨率
表 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% |
若要以编程方式为任何设备查找此信息,可以编写报告数据的实用工具程序。 可通过使用适用于桌面的 hdc 以及 HORZRES 和 VERTRES 索引 调用 API GetDeviceCaps() 函数,来检索本机主分辨率:
// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalResolution = GetDeviceCaps(desktopDc,HORZRES);
verticalResolution = GetDeviceCaps(desktopDc,VERTRES);
有关 GetDC 的详细信息,请参阅 GetDC() 函数。
主显示器 DPI 缩放比例
同样,可以使用 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 会返回不同的结果,具体取决于应用程序的 DPI 感知模式。 配置感知模式需要向应用程序清单添加 XML,如下所述:
DPI 感知模式 | 清单设置 | 返回的值 |
---|---|---|
无 | 无 | 对于所有显示器都是 96,与缩放比例无关 |
系统 DPI 感知 | <dpiAware>True</dpiAware> | 启动 Windows 会话时(用户首次登录 Windows 时)主显示器的 DPI |
按监视器 DPI 感知 | <dpiAware>True/PM</dpiAware> | 启动 Windows 会话时(用户首次登录 Windows 时)主显示器的 DPI。 若要获取应用程序所处的显示器的 DPI,请使用 GetWindowDpi() 或 GetDpiForMonitor() |
有关此清单设置的详细信息,请参阅 SetProcessDPIAware 函数。
缩放模式
“控制面板\外观和个性化\显示”用户界面 (UI) 包含一个复选框:“让我选择一个适合我的所有显示器的缩放级别”,它可控制系统是对所有显示器应用单个缩放比例(如 Windows 8 和早期版本 Windows 中所示),还是应用考虑每个显示器的像素密度的不同缩放比例(Windows 8.1 默认值)。 此复选框会配置 Windows 8.1 中的 HKCU\Control Panel\Desktop\Win8DpiScaling 注册表项。
表 3 HKCU\Control Panel\Desktop\Win8DpiScaling 值
核心价值 | 含义 |
---|---|
0 | 每个显示器使用不同缩放比例:Windows 8.1 默认值。从一个显示器移动到另一个显示器的内容会是正确大小,但可以进行位图缩放。 |
1 | 将相同缩放比例应用于所有显示器:Windows 8 及早期 Windows 版本行为。 从一个显示器移动到另一个显示器的内容可能大小不正确。 |
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\Control Panel\Desktop\LogPixels 注册表项中进行配置。
表 6 HKCU\Control Panel\Desktop\LogPixels 值
核心价值 | 含义 |
---|---|
96 | 每个显示器上为 100% 缩放 |
120 | 每个显示器上为 125% 缩放 |
144 | 每个显示器上为 150% 缩放 |
192 | 每个显示器上为 200% 缩放 |
其他 | 每个显示器上为 <其他> 96/100 缩放 |