使用Process Monitor探测Windows系统高DPI缩放设置的注册表项

news2024/12/26 11:44:11

目录

1、在高显示比例下部分软件界面显示模糊问题

2、如何设置才能使得软件显示的清晰一些?

3、使用Process Monitor监测上述设置对应的注册表的操作

4、最后


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N3I4https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N3I4https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具案例集锦(正在更新中...)icon-default.png?t=N3I4https://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_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers,写入的key值为exe程序的路径,Value值为:

1)应用程序选项,是禁用系统缩放,程序始终保持100%显示比例,写入的内容为:~ HIGHDPIAWARE
2)系统增强选项,使用系统缩放,系统对显示的清晰度进行改进,写入的内容为:~ GDIDPISCALING DPIUNAWARE

知道了注册表写入的位置以及写入的内容,我们就可以通过代码去实现这个设置了。

4、最后

       Process Monitor不仅可以监测程序的注册表活动,还可以监测程序的文件活动。我们在项目中已多次使用过该工具,可以高效地解决软件运行过程中遇到的若干问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式 04 nginx 的使用

01.Nginx可以理解成为一个代理运营商在计算机网络中。用户发送的请求在Nginx中处理,而后分配给相关的服务器 02.在Nginx文件中conf文件件,中修改nginx.conf文件 首先先去监听和获取请求,使用关键字server 这个是浏览器url中输入localhost时…

如何在本地部署运行ChatGLM-6B

在本篇技术博客中,将展示如何在本地获取运行代码和模型,并配置环境以及 Web GUI,最后通过 Gradio 的网页版 Demo 进行聊天。 官方介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM)…

Flutter 自定义裁剪之圆形豁口/缺口

目录 Flutter自定义裁剪Flutter的自定义裁剪类CustomClipper裁剪的实际代码思路分析注意点完整代码总结如图所示,图中的圆形缺口,需要我们自定义裁剪,才能实现。 Flutter自定义裁剪 裁剪,我们想到的是剪刀,实际上,Flutter的裁剪原理,和我们现实物理世界的剪刀是一样的…

木夕的IC日记——Vim使用【一】

Vim使用日记【一】 Vim的运行方式进入Vim第一步:打开文件保存文件并退出Vim三种模式下能做哪些事命令模式编辑模式底行模式Visual Block功能 Vim的运行方式 作为Linux系统中最常用的文本编辑器,Vim体现了Linux“万物皆是文件”的设计哲学。通过Vim&…

flink集群安装部署

1.下载 官网下载:Downloads | Apache Flink 阿里网盘下载(包含依赖包):阿里云盘分享 提取码:9bl2 2.解压 tar -zxvf flink-1.12.7-bin-scala_2.11.tgz -C ../opt/module 3.修改配置文件 cd flink-1.12.7/conf/ …

[C++]string的使用

目录 string的使用:: 1.string类介绍 2.string常用接口说明 string相关习题训练:: 1.仅仅反转字母 2.找字符串中第一个只出现一次的字符 3.字符串里面最后一个单词的长度 4.验证一个字符串是否是回文 5.字符串相加 6.翻转字符串…

[Dubbo] 重要接口与类 (三)

文章目录 1.dubbo的整体调用链路2.dubbo的源码整体设计3.重要接口和类 1.dubbo的整体调用链路 消费者通过Interface进行方法调用,统一交由消费者的Proxy处理(Proxy通过ProxyFactory来进行代理对象的创建) Proxy调用Filter模块,做…

linux中fork函数与vfork函数的区别

fork函数跟vfork函数一样能够创建进程,它们主要有两个区别 (1)区别一: vfork直接使用父进程存储空间,不拷贝。 (2)区别二: vfork保证子进程先运行,当子进程调用exit退…

【读论文】AT-GAN

【读论文】AT-GAN 介绍网络架构生成器IAMSTM 辨别器 损失函数SEM损失内容损失结构损失对抗损失 总结参考 论文:https://www.sciencedirect.com/science/article/pii/S156625352200255X 如有侵权请联系博主 介绍 大概是刚开学的时候就读到一篇文章,看完…

Nginx静态资源传输优化,文件高效传输,事半功倍

1.引出问题 Nginx可以作为静态资源服务器,比如我们访问192.168.110.97:80,熟悉的nginx欢迎界面,这其实也是nginx为我们提供的一个静态文件:index.html。 既然是静态资源,那我们能否优化一下传输效率呢? 1…

训练计划安排(练一休一训练分化+倒金字塔训练法)【了解即可,一般人容量不用练一休一,看抖音@孙悟饭桶】

目录 练一休一训练分化每次训练的组数12-15组 (4-5个动作)QA 倒金字塔训练法倒金字塔热身正式组常见误区: 训练补剂bcaa咖啡因肌酸蛋白粉 如何降低皮质醇水平如何提升睾酮水平文献出处睡眠8h摄入适量脂肪(0.8g每公斤体重&#xff…

java APT原理及APT实战 - 一步步教你写ButterKnife

一、定义 Java APT 是 Java 技术设计的一个 APT 架构, APT(Annotation Processing Tool)即注解处理器,它是一种处理注解的工具,也是javac中的一个工具,用于在编译阶段未生成class之前对源码中的注解进行扫…

Windows巧用git实现笔记自动备份

Windows巧用git实现笔记自动备份 准备git仓库配置自动上传脚本设置 Windows 自动定时任务参考文献 准备git仓库 安装git:https://git-scm.com/downloads: 注册并登录gitee,本地生成ssh key(详情百度),然后…

数据处理Pandas学习笔记(一)

import pandas as pdpandas值series创建 t pd.Series([1, 2, 31, 12, 3, 4]) t0 1 1 2 2 31 3 12 4 3 5 4 dtype: int64type(t)pandas.core.series.Seriesseries指定索引 t2 pd.Series([1,23,3,2,3],indexlist(abcde)) t2a 1 b 23 c 3 d …

【Java-05】常用API、正则表达式、Collection集合

主要内容 BigInteger类BigDecimal类Arrays类包装类String类的常用方法正则表达式Collection集合 1 BigInteger类 1.1 概述 概述 : java.math.BigInteger类是一个引用数据类型 , 可以用于计算一些大的整数 , 当超出基本数据类型数据范围的整数运算时就可以使用BigInteger了。…

类别无关的姿态估计ECCV2022

现有的2D姿态估计工作主要集中在某一类别,例如人类、动物和车辆。然而,有很多应用场景需要检测unseen对象类的姿态(或关键点)。因此作者提出CAPE任务(Category-Agnostic Pose Estimation),该任务…

Sketch哪个版本好用?

使用最新版本的 Sketch 是很有意义的。一方面,最新版本通常会有新的功能和改进,使设计师更方便地完成工作。另一方面,使用最新版本还可以避免出现因版本不兼容而无法打开源文件的问题。此外,最新版本通常会更稳定,因此…

Linux command(sar)

说明 sar命令是一个系统性能监测工具,用于收集、报告和分析系统的各种资源使用情况。以下是sar命令的基本用法: sar [选项] [时间间隔] [次数] 选项:可用的选项包括-a(显示所有资源使用情况)、-b(显示I/…

图片修复增强调研

Real-ESRGAN 工程地址:https://github.com/xinntao/Real-ESRGAN 效果: 人脸增强部分,调用的GFPGAN. GFPGAN 工程地址:https://github.com/TencentARC/GFPGAN 论文效果: BasicSR-ESRGAN: 项目地址&a…

[Qt编程之Widgets模块] -001: QButtonGroup抽象容器

1.QButtonGroup简介 QButtonGroup提供了一个抽象容器,可以将按钮小部件放入其中。它不提供此容器的可视化表示,而是管理组中每个按钮的状态。 互斥按钮组,将关闭除已单击的按钮外的所有可选中(可切换)按钮。默认情况下…