与 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 缩放级别
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 比例系数
96
100
120
125
144
150
192
200
<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 缩放。
- 与 DPI 相关的 API 和注册表设置
- 注册表中一些与用户登录和屏保相关的设置项
- WindowsXP相关设置对应的注册表位置
- 操作注册表的API函数介绍(RegSetValueEx:该函数用来设置注册表的键值和键类型)
- 如何把与java相关的API设置到工具栏
- 注册表API相关操作演示
- 和用户隐私相关的注册表项
- 获取系统的DPI设置
- DPI 相关
- DPI相关
- DPI、像素与分辨率的区别和联系
- DPI与像素的关系
- Windows的“分辨率”与“DPI”
- 注册表的相关基础知识
- 注册表的相关操作
- 相关的注册表参数
- 和路径相关的API
- 像素和Dpi的关系
- 海明码(Hamming Code )编码
- CloseUtil 关闭流或者socket
- 模拟赛#1补题 CodeForces 574A Bear and Elections(模拟+)
- Adaboost
- js继承有5种实现方式
- 与 DPI 相关的 API 和注册表设置
- iOS Push Notification注意事项
- 在SD卡上安装树莓派的操作系统 - Linux版
- c++单例三种实现
- $.extend()和$.fn.extend()详解
- win10 系统 chrome内核浏览器 微软雅黑字体难看的解决方法
- Java将一般信息输出到console,将错误信心输出到文件
- Android ProGuard 的作用、使用及bug分析
- java中i++与++i的探讨