无忧启动论坛

标题: 只差一步:解决PE中DPI显示缩放难题! [打印本页]

作者: lhc0688    时间: 2022-4-26 01:18
标题: 只差一步:解决PE中DPI显示缩放难题!
本帖最后由 lhc0688 于 2022-5-9 00:27 编辑

对于DPI显示缩放,论坛里查过不少帖子,很多技术思路,但一直未找到能简单应用的方案。目前能在PE中看到的方案,大致有三种:

1、直接写注册表,缩放设置为150%。这种可以一定程度解决高分屏应用,但同时也会给低分屏带来困扰;--- (经实测,这个理解不正确,应该是根据显示分辨率自动缩放)

2、PECMD命令DISP设置分辨率,这种方式成功率很大程度取决于显示驱动,实际使用中很多情况下会无效,而且这种直接设置显示分辨率,也会导致显示器不匹配,黑屏等问题;

3、调用WinXShell命令设置显示缩放,这种确实可以设置缩放,但我自己实际测试感觉缩放效果不够稳定,连续设置大、小比例几次后,桌面图标会出现间距异常,刷新资源管理也无法解决;---- (这段描述不正确,今天刚发现,图标间距异常是跟使用的PE有关,非WinXShell原因特做说明,以免误导他人),而且这种方式要集成WinXShell,如果单为缩放显示,感觉有点大材小用;

为找到更简单稳定的解决方案,我也发过几个帖子求教,但技术大佬们的代码超出我的理解范畴,我的想法是通过简单调用命令或工具,实现手动缩放,或自动判断缩放。

今天又重新捡起这个问题进行折腾,设置工具已有,上次帖子发过,但难题是如何在pe中实现图形界面调用,为此上次还专门学了下vb,做了个带UI的小程序,但后来发现实际使用中会有很多问题,只好放弃;PECMD也可以写UI界面,但同样是技术水平达不到也只能不考虑;

经过一下午的琢磨、尝试,最终采用注册表方式直接添加右键二级菜单方式实现,实际使用后,个人感觉这种方式反倒更简单完美,效果见下图:

[attach]500323[/attach]

经实际测试,缩放效果感觉很稳定,如果连续大小缩放导致图标不同步,刷新下资源管理器即可(桌面系统也是同样);

后续打算解决的问题:

PE启动后先检测DPI显示参数,根据参数自动选择合适缩放比例,看能否有实现的可能---已实现;


请求坛里的大佬能帮助指点下,解决三个技术问题:

1、调用setdpi.exe后同步执行pecmd kill explorer.exe问题:-----【已解决,感谢@826773297朋友指导!】
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi150\Command]
@="SetDpi 150|pecmd kill explorer.exe"

这样写会导致无效,用call、exec调用也不行;是不是外部命令和pecmd命令不能同时使用?正确写法如何?恳请指教;


2、pecmd.ini里如何写命令,以获取当前显示器分辨率数据(只需一个横向数据就可以,就是那个1024、1920等);---【已成功解决,完美实现启动自动检测设置显示缩放,感谢@826773297朋友的指导,已经帮写的代码!

3、菜单显示位置能否设置靠上下横线,而不是在【粘贴】、【粘贴快捷方式】之间?---【已解决,换了个注册表位置】


三个技术问题已全部解决,非常感谢@826773297坛友的大力帮助

--------------------------------------------
不过刚意识到一个新问题:自己显示器只能测试一个参数,无法测试不同环境下是否都能正常缩放,这个只能拜托坛里有兴趣朋友下载使用实测了。

dpi-3.jpg (198.54 KB, 下载次数: 290)

dpi-3.jpg

作者: lhc0688    时间: 2022-4-26 01:29
调用命令实现缩放用了一分钟,写出右键二级菜单竟然花了近十个小时,小白搞技术真是太难,希望多给指点、支持,水平不到勿见笑。
作者: ttt0001    时间: 2022-4-26 05:22
辛苦了,感谢分享!
作者: zhanglefu333    时间: 2022-4-26 06:21
感谢分享!
作者: 444742627    时间: 2022-4-26 06:59
厉害了!我来试试
作者: 481416322    时间: 2022-4-26 07:08
谢谢分享!能否分享可导入的注册表文件?
作者: bfgxp    时间: 2022-4-26 07:18
厉害,这个在一些高分屏上非常有用
作者: sairen139    时间: 2022-4-26 07:22
uefi启动的pe也行吗?
作者: zlzx01    时间: 2022-4-26 07:57
感谢分享!
作者: 旁观者清    时间: 2022-4-26 09:48
谢谢分享。
作者: 泮安宁    时间: 2022-4-26 10:04
右键的注册表可不可以分享一下
作者: lhc0688    时间: 2022-4-26 10:04
sairen139 发表于 2022-4-26 07:22
uefi启动的pe也行吗?

我的就是uefi+gpt分区
作者: lhc0688    时间: 2022-4-26 10:07
481416322 发表于 2022-4-26 07:08
谢谢分享!能否分享可导入的注册表文件?

Windows Registry Editor Version 5.00

;----------添加DPI显示缩放设置菜单----------
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi]
@=""
"MUIVerb"="&设置显示比例"
"Subcommands"=""
"Position"="Middle"

[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell]

[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi100]
@="缩放为100%"
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi100\Command]
@="SetDpi 100"

[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi125]
@="缩放为125%"
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi125\Command]
@="SetDpi 125"

[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi150]
@="缩放为150%"
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi150\Command]
@="SetDpi 150"

[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi175]
@="缩放为175%"
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi175\Command]
@="SetDpi 175"

[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi200]
@="缩放为200%"
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi200\Command]
@="SetDpi 200"

;----------添加DPI显示缩放设置菜单结束----------


作者: lhc0688    时间: 2022-4-26 10:10
lhc0688 发表于 2022-4-26 10:07
Windows Registry Editor Version 5.00

;----------添加DPI显示缩放设置菜单----------

这个右键二级菜单注册表花了我近十个小时,网上查了几十个,大多都是误导,测试几十遍,二级菜单就是出不来,最后还是自己一点点测试找到正确写法。
作者: 松暗暗    时间: 2022-4-26 10:30

厉害了!我来试试
作者: minchengan    时间: 2022-4-26 11:17
PE有这个需求,感谢辛苦研究
作者: caocaofff    时间: 2022-4-26 11:22
command里可以使用PECMD TEAM EXEC SetDpi 150|kill explorer.exe
作者: 826773297    时间: 2022-4-26 11:25
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi150\Command]

@="pecmd.exe team exec =!Setdpi.exe 150|kill explorer.exe"

作者: 826773297    时间: 2022-4-26 11:27
第二个问题,用disp命令获取当前分辨率大小
第三个问题,改注册表,百度有
作者: lhc0688    时间: 2022-4-26 11:30
826773297 发表于 2022-4-26 11:25
[HKEY_CLASSES_ROOT\DesktopBackground\shell\Setdpi\shell\Setdpi150\Command]

@="pecmd.exe team exec ...

测试正确!完美运行,非常感谢!
作者: lhc0688    时间: 2022-4-26 11:38
caocaofff 发表于 2022-4-26 11:22
command里可以使用PECMD TEAM EXEC SetDpi 150|kill explorer.exe

谢谢!已经测试通过。
作者: lhc0688    时间: 2022-4-26 11:43
826773297 发表于 2022-4-26 11:27
第二个问题,用disp命令获取当前分辨率大小
第三个问题,改注册表,百度有

格式│DISP [-confirm] [-delay] [=显示器号] [@位置矩阵] [S多显方式] [P] [W水平分辨 H垂直分辨]

[B颜色深] [F刷新率] [T等待ms]  [O方向]

DISP <?|?*>  [=显示器号] 变量名       //查询当前或全部可能配置,多行,行内TAB分隔  
-----------------------------------------------------------------------------------------------------------------

实在看不懂,命令该如何写,可以获取 【W水平分辨】值,并赋值给一个变量呢?


作者: 826773297    时间: 2022-4-26 11:50
lhc0688 发表于 2022-4-26 11:43
格式│DISP [-confirm] [-delay] [=显示器号] [@位置矩阵] [S多显方式]  [W水平分辨 H垂直分辨]

  [F ...

DISP  ? &CUR
MESS %&CUR%
作者: 826773297    时间: 2022-4-26 11:53
DISP  ? &CUR
MSTR* 水平=<1>%&CUR%
MESS %水平%
手机打的,可能有问题
作者: lhc0688    时间: 2022-4-26 12:06
826773297 发表于 2022-4-26 11:53
DISP  ? &CUR
MSTR* 水平=%&CUR%
MESS %水平%



完美获取!一步到位直接成功执行,非常感谢!技术水平让人钦佩!

作者: lhc0688    时间: 2022-4-26 12:38
826773297 发表于 2022-4-26 11:53
DISP  ? &CUR
MSTR* 水平=%&CUR%
MESS %水平%

DISP  ? &CUR
MSTR* My_dpw=<1>%&CUR%

IFEX %My_dpw%>=3840,pecmd.exe team exec =!Setdpi.exe 200,!
{
        IFEX %My_dpw%>=2560,pecmd.exe team exec =!Setdpi.exe 175,!
        {
                IFEX %My_dpw%>=1920,pecmd.exe team exec =!Setdpi.exe 150,!
                {
                        IFEX %My_dpw%>=1600,pecmd.exe team exec =!Setdpi.exe 125,!
                        {
                                pecmd.exe team exec =!Setdpi.exe 100
                        }
                }
        }
}

-----------------------------------------------------
尝试写了个判断语句,但执行发现判断不正确,不知道是变量值问题,还是代码语法问题,还是再麻烦请教看能否指点一下。


作者: 狼人72105    时间: 2022-4-26 13:01
lhc0688 发表于 2022-4-26 12:06
完美获取!一步到位直接成功执行,非常感谢!技术水平让人钦佩!

楼上可是我们丐帮帮主,很厉害的,纯手工PE创始人,兄嘚,进群了解下。。。QQ群,有兴趣,下次告诉你群号。。。
作者: 826773297    时间: 2022-4-26 13:02
lhc0688 发表于 2022-4-26 12:38
DISP  ? &CUR
MSTR* My_dpw=%&CUR%

DISP  ? &CUR
MSTR* My_dpw=<1>%&CUR%

IFEX |%My_dpw%>=3840,
{
exec =!Setdpi.exe 200
}!
{
IFEX |%My_dpw%>=2560,
{
exec =!setdpi.exe 175
}!
{
IFEX |%My_dpw%>=1920,
{
exec =!setdpi.exe 150
}!
{
IFEX |%My_dpw%>=1600,
{
exec =!setdpi.exe 125
}!
{
exec =!setdpi.exe 100
}
}
}


}
作者: 826773297    时间: 2022-4-26 13:02
手机打的,不知道有没有写错
作者: 826773297    时间: 2022-4-26 13:03
狼人72105 发表于 2022-4-26 13:01
楼上可是我们丐帮帮主,很厉害的,纯手工PE创始人,兄嘚,进群了解下。。。QQ群,有兴趣,下次告诉你群号 ...

az~
作者: 狼人72105    时间: 2022-4-26 13:10
826773297 发表于 2022-4-26 13:03
az~

哈哈哈哈哈。。。。。
作者: lhc0688    时间: 2022-4-26 13:20
826773297 发表于 2022-4-26 13:02
DISP  ? &CUR
MSTR* My_dpw=%&CUR%

实测代码执行正常,PE启动后完美实现自动检测缩放!
几次发帖都能得到兄弟的耐心传教,技术上都是毫无保留直接帮忙搞定,真是无比感谢!
作者: 826773297    时间: 2022-4-26 13:52
lhc0688 发表于 2022-4-26 13:20
实测代码执行正常,PE启动后完美实现自动检测缩放!
几次发帖都能得到兄弟的耐心传教,技术上都是毫无保 ...

最后一行加一个kill explorer就能重启桌面
作者: 826773297    时间: 2022-4-26 13:54
我比较习惯用各种判断和循环镶套
作者: lhc0688    时间: 2022-4-26 15:07
826773297 发表于 2022-4-26 13:52
最后一行加一个kill explorer就能重启桌面

收到!
作者: 红毛樱木    时间: 2022-4-26 15:09
说到这里不得不说一下显示器的PPI参数了。这里做过详细分析,USM的Win10&11pe很早就适配了。
https://www.sysceo.com/forum/thread-44479-1-1.html

因为你不可能去把一台100寸的4K显示器还拉伸DPI
作者: cuicongyuan    时间: 2022-4-26 15:29
谢谢大佬们!
作者: lhc0688    时间: 2022-4-26 15:42
红毛樱木 发表于 2022-4-26 15:09
说到这里不得不说一下显示器的PPI参数了。这里做过详细分析,USM的Win10&11pe很早就适配了。
https://www. ...

感谢樱木老大提醒。不过我的想法是在一般应用场合下,90%以上使用者显示器应该都是常见的标准,少数非常见标准显示器使用者,一般也会是比较爱折腾的技术玩家,能自己掌握、解决复杂问题;

而且,PE下的显示条件,也没必要做到像桌面系统一样完美精确,毕竟只是临时用下,其解决的目标重心还是能容易识别、看清操作界面,通过大致的缩放,能获得相对合适的显示界面;
作者: 481416322    时间: 2022-4-26 15:48
本帖最后由 481416322 于 2022-4-26 15:50 编辑

反馈:我导入了注册表,用右键时汉字出错
点击缩放比,也不起作用。




作者: ttt0001    时间: 2022-4-26 15:52
保存注册表时,用UTF-16保存,楼上看一下,是不是错了
作者: lhc0688    时间: 2022-4-26 15:56
本帖最后由 lhc0688 于 2022-4-26 15:58 编辑

我关注这个DPI缩放问题已经很久,差不多十几年前,开始使用高分屏,就一直被这个问题困扰。测试过很多PE,早期能实现显示缩放的占很小比例,现在多一些,但基本方式也是采用固定缩放比例或设置分辨率为1024*768;很多PE高手重点解决显示驱动问题,集成了显示驱动后显示更精确,但反倒缩放问题更突出,我以前三星4k屏用过很久,经常进PE安装、恢复系统,都要用手机拍照放大才能操作;所以,我个人体会认为,显示缩放应该是PE非常重要的技术要求,该花精力解决一下了,而非把问题推给使用者,说使用者自身显示器的问题。
作者: 红毛樱木    时间: 2022-4-26 16:29
lhc0688 发表于 2022-4-26 15:56
我关注这个DPI缩放问题已经很久,差不多十几年前,开始使用高分屏,就一直被这个问题困扰。测试过很多PE, ...

这问题很早USM就解决了,解决了好几年了。
作者: lhc0688    时间: 2022-4-26 20:48
既然樱木大师提到了PPI,从完美角度出发,想咨询下各位高手,PECMD能同时获取PPI数据吗?有没可能简单实现同时判断显示器尺寸、分辨率?
作者: saiz    时间: 2022-4-26 23:46
setdpi.exe需要VC 2015
請問是如何加入PE的?
我加了vcruntime140.dll msvcp140.dll
到X:\windows\system32下 依然不能使用setdpi.exe
作者: lhc0688    时间: 2022-4-27 00:25
saiz 发表于 2022-4-26 23:46
setdpi.exe需要VC 2015
請問是如何加入PE的?
我加了vcruntime140.dll msvcp140.dll

支持库方面我也搞不明白,我尝试下找几个文件,你试试看行不:
vc支持.rar (336.64 KB, 下载次数: 30)





作者: 2013koko    时间: 2022-4-27 00:54
saiz 发表于 2022-4-26 23:46
setdpi.exe需要VC 2015
請問是如何加入PE的?
我加了vcruntime140.dll msvcp140.dll

这两个文件放到 SysWOW64 下面就可以了
作者: saiz    时间: 2022-4-27 18:46
2013koko 发表于 2022-4-27 00:54
这两个文件放到 SysWOW64 下面就可以了

成功!
感謝!!
作者: 2013koko    时间: 2022-4-27 18:59
826773297 发表于 2022-4-26 13:52
最后一行加一个kill explorer就能重启桌面

我这边尝试,加了这个重启桌面,改变 DPI 后,桌面图标间距会有变化,不加反而正常,不知是不是个例?
作者: lhc0688    时间: 2022-4-27 20:49
2013koko 发表于 2022-4-27 18:59
我这边尝试,加了这个重启桌面,改变 DPI 后,桌面图标间距会有变化,不加反而正常,不知是不是个例?

我这边任意次数刷新explore测试都没发现错位问题,是不是桌面快捷方式带小箭头缘故?两者好像只有这个不一样。
作者: 826773297    时间: 2022-4-28 11:16
2013koko 发表于 2022-4-27 18:59
我这边尝试,加了这个重启桌面,改变 DPI 后,桌面图标间距会有变化,不加反而正常,不知是不是个例?

更改dpi后图标间距有变化是正常的
作者: 2013koko    时间: 2022-4-28 18:34
826773297 发表于 2022-4-28 11:16
更改dpi后图标间距有变化是正常的

收到,谢谢指点!
作者: 9527sss    时间: 2022-4-28 18:55
感谢分享!
作者: HIGHQ    时间: 2022-4-28 19:25
使用版大提供的资源, 修改本人常用 Win10PE (x64), Win11PE (x64), 进行实机测试,
基本上台式机都没有问题, 效果也不错, 但是笔记本状况就有点问题, 测试了三台
分辨率不同的笔记本, 1920*1080, 1440*900, 1366*768, PE启动后侦测到的分辨率
分别为: 800*600, 640*480, 1366*768, 所以依据版大的自适应设定, 前两台的显示
变得不正常,因显示太大, 加上无法调整显示比例, 部份应用程序无法操作, 这个状况有解方吗?

作者: lhc0688    时间: 2022-4-28 20:02
HIGHQ 发表于 2022-4-28 19:25
使用版大提供的资源, 修改本人常用 Win10PE (x64), Win11PE (x64), 进行实机测试,
基本上台式机都没有问题 ...

我自己测试用的是1920的笔记本,检测到的是1920正常;
能否在pe里,直接运行pecmd,输入826773297老大的代码:

DISP  ? &CUR
MSTR* 水平=<1>%&CUR%
MESS %水平%

然后执行下,看检测的结果是否正常?
作者: lhc0688    时间: 2022-4-28 20:03
lhc0688 发表于 2022-4-28 20:02
我自己测试用的是1920的笔记本,检测到的是1920正常;
能否在pe里,直接运行pecmd,输入826773297老大的 ...

作者: lhc0688    时间: 2022-4-28 20:06
HIGHQ 发表于 2022-4-28 19:25
使用版大提供的资源, 修改本人常用 Win10PE (x64), Win11PE (x64), 进行实机测试,
基本上台式机都没有问题 ...

还有,直接用我27日发的PE先测试下,看有没可能PE兼容问题?
作者: 断桥烟雨    时间: 2022-4-28 20:20

哈哈哈哈哈。。。。。
作者: HIGHQ    时间: 2022-4-28 21:20
lhc0688 发表于 2022-4-28 20:06
还有,直接用我27日发的PE先测试下,看有没可能PE兼容问题?

我试了版大提供的PE, 问题还是相同, 再更换PECMD.EXE版本, 1920, 1366正常,
1440还是有问题, 把开机ISO的架构换成微PE旧版本架构(如下图), 居然正常了,
神奇了...

WEPE21.jpg (238.03 KB, 下载次数: 146)

WEPE21.jpg

作者: lhc0688    时间: 2022-4-28 21:30
HIGHQ 发表于 2022-4-28 21:20
我试了版大提供的PE, 问题还是相同, 再更换PECMD.EXE版本, 1920, 1366正常,
1440还是有问题, 把开机ISO ...

难道跟ISO外壳BCD参数有关?我这个ISO用的是5年前的,感觉挺稳定一直没换,要不你把正常的那个iso壳打包发下,我对比看看。
作者: HIGHQ    时间: 2022-4-29 01:36
lhc0688 发表于 2022-4-28 21:30
难道跟ISO外壳BCD参数有关?我这个ISO用的是5年前的,感觉挺稳定一直没换,要不你把正常的那个iso壳打包 ...

附上使用的Win10PE64的ISO壳(不含WEPE64.WIM), 参考看看...

WEPE64.part01.rar

950 KB, 下载次数: 10, 下载积分: 无忧币 -2

WEPE64.part02.rar

950 KB, 下载次数: 10, 下载积分: 无忧币 -2

WEPE64.part03.rar

476.93 KB, 下载次数: 8, 下载积分: 无忧币 -2


作者: lhc0688    时间: 2022-4-29 06:50
HIGHQ 发表于 2022-4-29 01:36
附上使用的Win10PE64的ISO壳(不含WEPE64.WIM), 参考看看...

看了下,wepe这个BCD中启用了GraphicsForceHighestMode参数项,BCD中做了两个引导项:原始分辨率引导,和1024*768分辨率引导;你方便的话,看下是那种引导下正常?(估计应该是原始模式的):

捕获2.JPG (102.09 KB, 下载次数: 110)

捕获2.JPG

作者: lhc0688    时间: 2022-4-29 06:56
HIGHQ 发表于 2022-4-28 19:25
使用版大提供的资源, 修改本人常用 Win10PE (x64), Win11PE (x64), 进行实机测试,
基本上台式机都没有问题 ...

这个估计也是BCD的问题,GraphicsForceHighestMode参数设置为:800*600 了
作者: lhc0688    时间: 2022-4-29 07:31
HIGHQ 发表于 2022-4-28 19:25
使用版大提供的资源, 修改本人常用 Win10PE (x64), Win11PE (x64), 进行实机测试,
基本上台式机都没有问题 ...

做了一个带GraphicsForceHighestMode参数的ISO外壳,方便的话你再试试看:
ISO - 标准-去掉字库.rar (894.82 KB, 下载次数: 30)

作者: HIGHQ    时间: 2022-4-29 08:05
lhc0688 发表于 2022-4-29 07:31
做了一个带GraphicsForceHighestMode参数的ISO外壳,方便的话你再试试看:

经版大指点, 我已修改BCD, 测试没问题, 再比对提供的ISO外壳, 内容几乎一致, 问题解决了, 非常感谢...
作者: wsdyleon    时间: 2022-4-29 08:31
喜欢这种探讨技术的帖子,内容也很实用。我用2013koko的作品就遇到分辨率问题,大佬说让我自己更新显卡驱动,但pe用了两个软件更新驱动失败.这个显卡驱动就是在我单位这个显示器显示不全。
作者: HIGHQ    时间: 2022-4-29 09:28
版大, 请教个微PE的问题, 如下图所示, 微PE的 控制面板-字体 功能被禁用,
造成应用程序字体无法显示(本人外挂了RocketDock苹果仿真工作列),
我试过论坛中其他几个PE没有问题, 但总觉得微PE蛮稳定的, 所以没想换PE,
这个问题可以在微PE启动时汇入登录档解决吗?

SShot-1.jpg (102.96 KB, 下载次数: 129)

SShot-1.jpg

作者: 2013koko    时间: 2022-4-29 10:34
wsdyleon 发表于 2022-4-29 08:31
喜欢这种探讨技术的帖子,内容也很实用。我用2013koko的作品就遇到分辨率问题,大佬说让我自己更新显卡驱动 ...

你使用新外壳是否解决问题了?
若有效我也抄一下
作者: wsdyleon    时间: 2022-4-29 10:51
2013koko 发表于 2022-4-29 10:34
你使用新外壳是否解决问题了?
若有效我也抄一下

测试了下,应该是驱动问题,使用本帖楼主的版本(维护班)的几个缩放比例,仍然显示没有变化。
但是默认的分辨率在我的这台电脑上正常。
但大佬你的那个作品默认显示比例看不到底部。是哪个版本默认dpi原因吗?
大佬的体积我还是比较喜欢的。
我个人不喜欢太多驱动的,太多功能的。
能进行常规维护操作即可。没有网络的话遇到特殊情况不方便。

作者: Bluebells    时间: 2022-4-29 10:56
本帖最后由 Bluebells 于 2022-4-30 21:12 编辑

更改为 PECMD 的自定义子函数
  1. _SUB SetDPI
  2.     ENVI$# &pvParam=*4 0
  3.     CALL $--bool --qd --ret:&SystemParametersInfoWRet user32.dll,SystemParametersInfoW,#158,0,*&pvParam,1
  4.     FIND $%~1=AutoDPI,TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&SystemParametersInfoWRet%,0,1| ENVI @@DeskTopFresh=1 //自动设置为系统推荐的缩放比例
  5.     //注册右键上下文菜单
  6.     ENVI?ints &pvParam=&DPI0
  7.     TEAM CALC #&DPI1=%&DPI0%+1| CALC #&DPI2=%&DPI0%+2| CALC #&DPI3=%&DPI0%+3| CALC #&DPI4=%&DPI0%+4| CALC #&DPI5=%&DPI0%+5| CALC #&DPI6=%&DPI0%+6| CALC #&DPI7=%&DPI0%+7
  8.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\\SubCommands=
  9.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\\MUIVerb=设置显示比例(&Z)
  10.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\\Position=Bottom
  11.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor0\\MUIVerb=缩放比例 100%%
  12.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor0\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI0%,0,1| ENVI @@DeskTopFresh=1
  13.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\\MUIVerb=缩放比例 125%%
  14.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI1%,0,1| ENVI @@DeskTopFresh=1
  15.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor2\\MUIVerb=缩放比例 150%%
  16.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor2\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI2%,0,1| ENVI @@DeskTopFresh=1
  17.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor3\\MUIVerb=缩放比例 175%%
  18.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor3\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI3%,0,1| ENVI @@DeskTopFresh=1
  19.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor4\\MUIVerb=缩放比例 200%%
  20.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor4\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI4%,0,1| ENVI @@DeskTopFresh=1
  21.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor5\\MUIVerb=缩放比例 225%%
  22.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor5\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI5%,0,1| ENVI @@DeskTopFresh=1
  23.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor6\\MUIVerb=缩放比例 250%%
  24.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor6\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI6%,0,1| ENVI @@DeskTopFresh=1
  25.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor7\\MUIVerb=缩放比例 300%%
  26.     REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor7\command\\=PECMD.EXE TEAM CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI7%,0,1| ENVI @@DeskTopFresh=1
  27. _END
复制代码

仅依赖 PECMD 外部工具, 感谢 szwp 提供使用 PECMD 更改 DPI 的代码, 红毛樱木 提供判断系统推荐值和 100% 缩放比例值~
PS: 未进行完整测试!!!


作者: wsdyleon    时间: 2022-4-29 10:57
wsdyleon 发表于 2022-4-29 10:51
测试了下,应该是驱动问题,使用本帖楼主的版本(维护班)的几个缩放比例,仍然显示没有变化。
但是默认 ...

对的,我没有换外壳。为了省事我直接替换的wim。我再测试下iso实际效果。
作者: 2013koko    时间: 2022-4-29 11:02
wsdyleon 发表于 2022-4-29 10:57
对的,我没有换外壳。为了省事我直接替换的wim。我再测试下iso实际效果。

我的意思,你用我的wim,加到楼主的iso后是否分辨率正常?因为分辨率800x600再调dpi是调不了的,就是100%
作者: lhc0688    时间: 2022-4-29 11:03
重设分辨率需要显示驱动支持,调整DPI缩放不需要显示驱动支持。
---------------
所以我一直认为,对于PE,调整缩放比例方式,比搞定分辨率更实用,也更容易实现。
作者: 2013koko    时间: 2022-4-29 11:13
分辨率问题是在一些特殊机型上出现,我这边没有遇到寸\
作者: 2013koko    时间: 2022-4-29 11:16
lhc0688 发表于 2022-4-29 11:03
重设分辨率需要显示驱动支持,调整DPI缩放不需要显示驱动支持。
---------------
所以我一直认为,对于P ...

调整dpi事实上是与分辩率相关的,上限相关,1092的你调不到200%
作者: HIGHQ    时间: 2022-4-29 11:42
2013koko 发表于 2022-4-29 10:34
你使用新外壳是否解决问题了?
若有效我也抄一下

OK, 問題解決了...
作者: wsdyleon    时间: 2022-4-29 11:46
lhc0688 发表于 2022-4-29 11:03
重设分辨率需要显示驱动支持,调整DPI缩放不需要显示驱动支持。
---------------
所以我一直认为,对于P ...

明白了。dpi是总体的大小,缩放。
作者: wsdyleon    时间: 2022-4-29 11:48
2013koko 发表于 2022-4-29 11:02
我的意思,你用我的wim,加到楼主的iso后是否分辨率正常?因为分辨率800x600再调dpi是调不了的,就是100%

确实是这个问题。
我测试了下,用lhc0688的壳子,2013koko的wim,分辨率不再是800*600了。
当然设置分辨率功能,依然不能用。个人觉得,这个功能没啥作用,对于我来说能正常显示全就行了。
pe毕竟是临时的,能用就行。
作者: lhc0688    时间: 2022-4-29 11:50
wsdyleon 发表于 2022-4-29 11:48
确实是这个问题。
我测试了下,用lhc0688的壳子,2013koko的wim,分辨率不再是800*600了。
当然设置分 ...

重设分辨率需要显示驱动支持,调整DPI缩放不需要显示驱动支持。
---------------
所以我一直认为,对于PE,调整缩放比例方式,比搞定分辨率更实用,也更容易实现。
作者: 2013koko    时间: 2022-4-29 11:57
wsdyleon 发表于 2022-4-29 11:48
确实是这个问题。
我测试了下,用lhc0688的壳子,2013koko的wim,分辨率不再是800*600了。
当然设置分 ...

ok,现在已确认是壳的问题,下次更新我换下壳
作者: cjhang    时间: 2022-4-29 12:17
pecmd.ini里如何写命令  麻烦发一下
作者: szwp    时间: 2022-4-29 12:43
Bluebells 发表于 2022-4-29 10:56
我也来一个右键菜单更改缩放比例的注册表:
仅依赖 PECMD 外部工具, 感谢 szwp 提供使用 PECMD 更改 DPI 的 ...

https://www.codenong.com/35233182/

牵涉的东西比较多,这个API不是直接指定100,125,150,175,200
作者: lhc0688    时间: 2022-4-29 12:52
szwp 发表于 2022-4-29 12:43
https://www.codenong.com/35233182/

牵涉的东西比较多,这个API不是直接指定100,125,150,175,200

szwp大师总算冒泡了,估计实在看不过去我们在这里瞎折腾;

确实能感觉到牵扯东西太多,我们也看不懂,您就直接帮忙写个完整的得了,让我们也少绕点弯路。
作者: lhc0688    时间: 2022-4-29 13:08
本帖最后由 lhc0688 于 2022-4-29 13:09 编辑

所有步骤的大小可能不相同。

1
100,125,150,175,200,225,250,300,350, 400, 450, 500
直到250%,步长以25%为单位增加,之后以50%为单位增加。

因此,必须首先通过SPI_GETLOGICALDPIOVERRIDE参数获得建议的DPI缩放比例的值,对于该比例,可以使用相同的API。

1
SystemParametersInfo(SPI_GETLOGICALDPIOVERRIDE, 0, (LPVOID)&dpi, 1);
上面的dpi变量中返回的值也应以特殊方式理解。
该值将为负,其大小将指示上面列表中DPI缩放百分比的指数。

因此,如果此API返回-1,则建议的DPI缩放比例值将为125%。
----------------------------


是不是可以这样理解:


1、调用这个API接口进行缩放,必须先获取Windows的推荐比例?

2、如果可以直接获取推荐比例,那是不是就不需要再进行检测判断,直接调用SPI_GETLOGICALDPIOVERRIDE参数获得建议的DPI缩放比例的值?



作者: szwp    时间: 2022-4-29 13:08
lhc0688 发表于 2022-4-29 12:52
szwp大师总算冒泡了,估计实在看不过去我们在这里瞎折腾;

确实能感觉到牵扯东西太多,我们 ...

100,125,150,175,200,225,250,300,350, 400, 450, 500
直到250%,步长以25%为单位增加,之后以50%为单位增加。


这些数据链接里有,CALL $--qd# user32.dll,SystemParametersInfoW,159,X,0,1
类推即可,pecmd俺不熟,159是设置,158是获取。
作者: lhc0688    时间: 2022-4-29 13:12
CALL $--qd# user32.dll,SystemParametersInfoW,158,X,0,1
----------------------
我瞎理解下:如果这样写,是不是就能返回当前分辨率的建议缩放值呢?
作者: lhc0688    时间: 2022-4-29 13:19
本帖最后由 lhc0688 于 2022-4-29 13:20 编辑
lhc0688 发表于 2022-4-29 13:12
CALL $--qd# user32.dll,SystemParametersInfoW,158,X,0,1
----------------------
我瞎理解下:如果这样 ...

PECMD.EXE CALL $--qd# user32.dll,SystemParametersInfoW,158,0,0,1 &CUR

MESS %&CUR%

------------------------------------

测试,这样写获取不了。
作者: 2013koko    时间: 2022-4-29 14:22
本帖最后由 2013koko 于 2022-4-29 14:45 编辑
wsdyleon 发表于 2022-4-29 11:48
确实是这个问题。
我测试了下,用lhc0688的壳子,2013koko的wim,分辨率不再是800*600了。
当然设置分 ...

请帮忙测试下我改的这个壳,谢谢!
https://www.123pan.com/s/CTv9-gQHQH
作者: 2013koko    时间: 2022-4-29 14:23
本帖最后由 2013koko 于 2022-4-29 16:18 编辑
HIGHQ 发表于 2022-4-29 11:42
OK, 問題解決了...

请帮忙测试下我修改的这个壳是否有问题,谢谢!
https://www.123pan.com/s/CTv9-wQHQH
作者: 2013koko    时间: 2022-4-29 14:27
lhc0688 发表于 2022-4-29 13:19
PECMD.EXE CALL $--qd# user32.dll,SystemParametersInfoW,158,0,0,1 &CUR

MESS %&CUR%

69楼的贴子不同dpi的差别
SystemParametersInfoW,159,2,0,1"
SystemParametersInfoW,159,3,0,1"
照猫画虎159,4,0,1....5,0,1....这样不知能否继续下去?

作者: 红毛樱木    时间: 2022-4-29 15:09
本帖最后由 红毛樱木 于 2022-5-1 20:49 编辑
  1. ENVI^ EnviMode=1
  2. ENVI &&SPI_GETLOGICALDPIOVERRIDE=0x009E //158
  3. ENVI$# &&pvParam=*4 0
  4. CALL $--bool --qd --ret:&&SystemParametersInfoWRet user32.dll,SystemParametersInfoW,#%&SPI_GETLOGICALDPIOVERRIDE%,#0,*&pvParam,#1
  5. ENVI?ints &pvParam=&&vParam
  6. MESS. %&SystemParametersInfoWRet%<%&vParam%>
复制代码


其中 %&vParam% 为当前系统默认DPI拉伸值与100%对应关系。
假设如果你获取到的值是-2,那么这个-2就对应100%


作者: zxwei    时间: 2022-4-29 15:16
辛苦了,感谢分享!
作者: HIGHQ    时间: 2022-4-29 16:07
2013koko 发表于 2022-4-29 14:23
请帮忙测试下我修改的这个壳是否有问题,谢谢!
https://www.123pan.com/s/CTv9-wQHQH

連結失效了...無法下載
作者: 2013koko    时间: 2022-4-29 16:10
我看看
作者: 2013koko    时间: 2022-4-29 16:16
HIGHQ 发表于 2022-4-29 16:07
連結失效了...無法下載

麻烦点楼上的链接,有点怪,看着是一样的呀
作者: HIGHQ    时间: 2022-4-29 17:00
2013koko 发表于 2022-4-29 16:16
麻烦点楼上的链接,有点怪,看着是一样的呀

我分别在 1920*1080 及1366*768 的笔记本及台式机上使用你提供的ISO壳测试,
执行都正常, 效果也不错, 上图参考一下:

SShot(1366).jpg (95.98 KB, 下载次数: 150)

SShot(1366).jpg

SShot(1920).jpg (213.92 KB, 下载次数: 127)

SShot(1920).jpg

作者: 2013koko    时间: 2022-4-29 17:02
HIGHQ 发表于 2022-4-29 17:00
我分别在 1920*1080 及1366*768 的笔记本及台式机上使用你提供的ISO壳测试,
执行都正常, 效果也不错, 上 ...

好的,非常感谢!
作者: ttt0001    时间: 2022-4-29 18:44
非常不错,学习了!
作者: 826773297    时间: 2022-4-29 21:42
2013koko 发表于 2022-4-29 14:27
69楼的贴子不同dpi的差别
SystemParametersInfoW,159,2,0,1"
SystemParametersInfoW,159,3,0,1"

我写了一个pecmd小程序,参考了红毛大佬的代码,支持自动缩放dpi,运行时机是进入桌面后,可能需要重启一下explorer,有兴趣可以测试一下,system32需要有pecmd.exe
自动设置dpi.exe (8.5 KB, 下载次数: 58)

作者: 2013koko    时间: 2022-4-29 22:28
826773297 发表于 2022-4-29 21:42
我写了一个pecmd小程序,参考了红毛大佬的代码,支持自动缩放dpi,运行时机是进入桌面后,可能需要重启一 ...

收到,请问这个能像setdpi.exe 150 这样设置dpi吗?因为以前也有坛友对默认的dpi不满意,想要调整。如果可以,那就可以替代setdpi.exe,做成右键菜单选项,满足不同的需求,谢谢!
作者: 826773297    时间: 2022-4-30 07:27
2013koko 发表于 2022-4-29 22:28
收到,请问这个能像setdpi.exe 150 这样设置dpi吗?因为以前也有坛友对默认的dpi不满意,想要调整。如果 ...

只自动获取,没有命令参数
原理就是获取系统推荐dpi,然后设置




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3