您现在的位置是:首页 >其他 >使用Process Monitor探测Windows系统高DPI缩放设置的注册表项网站首页其他
使用Process Monitor探测Windows系统高DPI缩放设置的注册表项
目录
3、使用Process Monitor监测上述设置对应的注册表的操作
VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具案例集锦(正在更新中...)https://blog.csdn.net/chenlycly/category_12279968.html 使用Process Monitor工具可以监控目标程序在运行过程中进行的注册表活动,比如读取或写入哪个或哪些注册表项,有时我们在了解这些注册表项后,可以直接在代码中操作注册表,以控制我们程序的行为。今天通过一个实例详细讲述一下使用Process Monitor监测程序注册表项的完整过程。
1、在高显示比例下部分软件界面显示模糊问题
在win7或win10系统中,将系统的显示比例设置为大于100%的显示比例后,很多程序都会变得很模糊,程序显示效果放大了,系统会自动对软件的界面进行简单粗犷地放大,文字和图片都变大,也变得很模糊,如下所示:(以Dependency Walker工具为例)
但有个别软件依旧显示的很清晰,和100%显示比例时一样清晰,比如腾讯系的QQ、PC版微信、腾讯会议等软件,这些软件都自己实现了缩放,禁用了系统对其的缩放,所以能保持很好的清晰度。
但要自己实现跟随系统显示比例的缩放,技术上会比较难,要处理各种细节问题,处理的不好,会出一堆的bug,所以大多数软件厂商还是依赖于系统的简单缩放。很多使用QT开发的程序能自动适应系统的缩放比例,因为QT库中已经添加了对系统高DPI的适配。
2、如何设置才能使得软件显示的清晰一些?
对于大多数软件,有没有办法让其在高显示比例下能够保证很好的清晰度呢?答案是肯定的,Windows系统提供了相关的设置。可以右键点击exe程序或者exe程序的快捷方式,在文件的属性窗口中日点击兼容性标签页,点击窗口下方的“更改高DPI设置”按钮:
在打开的窗口下方的“高DPI缩放”栏,勾选“替代高DPI缩放行为”:
在下拉了列表中选择“应用程序”项,这样就能禁止系统缩放,程序仍然按100%大小显示,这样就能继续保持清晰度了。
但这有个问题,在高分辨率的显示屏上,比如2K屏的微软Surface平板电脑上,一般会设置150%及以上的显示比例,如果禁止系统缩放,窗口就会特别小,按钮就更小了,根本没法使用的,所以还是要使用系统缩放的,那怎么保证清晰度呢?这点Windows系统也考虑到了,可以在下拉框中选择“系统增强”:
系统会让缩放后的效果更佳清晰一些。
3、使用Process Monitor监测上述设置对应的注册表的操作
如果客户在使用时遇到窗口放大模糊的问题,我们不可能一一去告诉他们去做上述设置,那么有没有可能通过代码去自动设置呢?上面讲述的手动设置,系统将设置信息保存到哪里去了呢?感觉很大可能是保存到注册表中了,于是想用Process Monitor去监测一下注册表活动,看看能否找到信息保存到那个注册表路径中了以及向注册表中写入了什么信息。
上述设置窗口是隶属资源管理器进程explorer.exe的,所以我们在Process Monitor中将要监测的进程设置为explorer.exe:
然后取消对其他活动的监测,只监测注册表活动。
然后开启监测,手动按上面讲到的过程操作一下,然后停止监测。因为这个高显示比例应该是与DPI相关的,所以按下Ctrl+F调出搜索框,输入DPI关键字:
在监测到的结果中搜索。如果按关键字可以搜索到多记录,可以按下F3快捷键在这些满足条件的记录之间来回切换。关键字匹配到的结果,要加以甄别,看看到底那条记录是与当前的操作相关的。
因为上述设置操作是写数据库,所以我们只需要关注RegSetValue的操作,后来找到了注册表写入的位置:
对应的注册表位置为HKEY_CURRENT_USERSOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers,写入的key值为exe程序的路径,Value值为:
1)应用程序选项,是禁用系统缩放,程序始终保持100%显示比例,写入的内容为:~ HIGHDPIAWARE
2)系统增强选项,使用系统缩放,系统对显示的清晰度进行改进,写入的内容为:~ GDIDPISCALING DPIUNAWARE
知道了注册表写入的位置以及写入的内容,我们就可以通过代码去实现这个设置了。
4、最后
Process Monitor不仅可以监测程序的注册表活动,还可以监测程序的文件活动。我们在项目中已多次使用过该工具,可以高效地解决软件运行过程中遇到的若干问题。