无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: lhc0688
打印 上一主题 下一主题

[已解决] 只差一步:解决PE中DPI显示缩放难题!

    [复制链接]
271#
发表于 2022-9-14 21:36:48 | 只看该作者
本帖最后由 gbzx 于 2022-9-14 21:46 编辑
红毛樱木 发表于 2022-9-14 16:44
[CALL $--qd# user32.dll,SystemParametersInfoW,159,,0,1]                :函数不正确

日志里反应出 ...

我是套用作者Bluebells 69楼的代码,再参考你的说明,用后发现69楼的代码二处要改,第一是注册表项分隔符\\要改成\才会有桌面右键,第二是设置DPI时少了一个参数--bool,没这个参数就会出现“函数不正确”。
改后的代码:

LOGS %windir%\pe.log
//获取屏幕分辨率
DISP  ? &CUR
MSTR* curx=<2>%&CUR%  //<1>截取屏幕横向分辨率,并赋值curx。<2>截取屏幕纵向分辨率,并赋值curx。
//获取系统推荐DPI
ENVI$# &pvParam=*4 0
CALL $--bool --qd --ret:&SystemParametersInfoWRet user32.dll,SystemParametersInfoW,#158,0,*&pvParam,1
ENVI?ints &pvParam=&DPI0
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
//自动设置系统开机缩放比例
ifex $%curx%>=720,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI0%,0,1  //HD
ifex $%curx%>=1080,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI1%,0,1  //FHD
ifex $%curx%>=1440,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI2%,0,1  //2K
ifex $%curx%>=2160,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI3%,0,1  //4K
ifex $%curx%>=4320,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI4%,0,1  //8K
MESS %&SystemParametersInfoWRet%<%&DPI0%>
PE日志如下

1        {ENTER:D:\autodpi.ini}
1        [LOGS X:\Windows\pe.log]        <0>        :操作成功完成。
2        
3        [DISP  ? &CUR]        <0>        :操作成功完成。
4        [MSTR* curx=<2>1920        1080        32        64]        <0>        :操作成功完成。
5        
6        [ENVI$# &pvParam=*4 0]        <0>        :操作成功完成。
7        [CALL $--bool --qd --ret:&SystemParametersInfoWRet user32.dll,SystemParametersInfoW,#158,0,*&pvParam,1]        <0>        :操作成功完成。
8        [ENVI?ints &pvParam=&DPI0]        <0>        :操作成功完成。
9        [CALC #&DPI1=0+1]        <0>        :操作成功完成。
9        [CALC #&DPI2=0+2]        <0>        :操作成功完成。
9        [CALC #&DPI3=0+3]        <0>        :操作成功完成。
9        [CALC #&DPI4=0+4]        <0>        :操作成功完成。
9        [CALC #&DPI5=0+5]        <0>        :操作成功完成。
9        [CALC #&DPI6=0+6]        <0>        :操作成功完成。
9        [CALC #&DPI7=0+7]        <0>        :操作成功完成。
9        [TEAM CALC #&DPI1=0+1| CALC #&DPI2=0+2| CALC #&DPI3=0+3| CALC #&DPI4=0+4| CALC #&DPI5=0+5| CALC #&DPI6=0+6| CALC #&DPI7=0+7]        <0>        :操作成功完成。
11        {ifex $1080>=720,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,0,0,1}
11        [CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,0,0,1]        <0>        :操作成功完成。
11        [ifex $1080>=720,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,0,0,1]        <0>        :操作成功完成。
12        {ifex $1080>=1080,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,1,0,1}
12        [CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,1,0,1]        <0>        :操作成功完成。
12        [ifex $1080>=1080,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,1,0,1]        <0>        :操作成功完成。
13        {ifex $1080>=1440,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,2,0,1}
13        [ifex $1080>=1440,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,2,0,1]        <0>        :操作成功完成。
14        {ifex $1080>=2160,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,3,0,1}
14        [ifex $1080>=2160,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,3,0,1]        <0>        :操作成功完成。
15        {ifex $1080>=4320,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,4,0,1}
15        [ifex $1080>=4320,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,4,0,1]        <0>        :操作成功完成。
16        [MESS 1<0>]        <0>        :操作成功完成。


MESS %&SystemParametersInfoWRet%<%&DPI0%>的结果是[MESS 1<0>],前面的那个1不知是啥意?0应该是系统推荐的DPI


桌面右键

//注册右键菜单
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\SubCommands=
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\MUIVerb=DPI设置(&Z)
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\Icon=X:\Windows\Resources\Icons\Display.dll_1.ico
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\Position=Bottom
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor0\MUIVerb=缩放比例 100%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor0\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI0%,0,1| ENVI @@DeskTopFresh=1
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\MUIVerb=缩放比例 125%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI1%,0,1| ENVI @@DeskTopFresh=1
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor2\MUIVerb=缩放比例 150%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor2\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI2%,0,1| ENVI @@DeskTopFresh=1
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor3\MUIVerb=缩放比例 175%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor3\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI3%,0,1| ENVI @@DeskTopFresh=1
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor4\MUIVerb=缩放比例 200%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor4\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI4%,0,1| ENVI @@DeskTopFresh=1

点评

你这里的显示都没问题了呀。 1是SystemParametersInfoW的返回值[/backcolor] https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfow Return valueType: BOOLIf the fu  详情 回复 发表于 2022-9-15 16:54
回复

使用道具 举报

272#
发表于 2022-9-15 16:54:05 | 只看该作者
gbzx 发表于 2022-9-14 21:36
我是套用作者Bluebells 69楼的代码,再参考你的说明,用后发现69楼的代码二处要改,第一是注册表项分隔符 ...

你这里的显示都没问题了呀。
1是SystemParametersInfoW的返回值

https://docs.microsoft.com/en-us ... stemparametersinfow
Return value
Type: BOOL
If the function succeeds, the return value is a nonzero value.
If the function fails, the return value is zero. To get extended error information, call [color=var(--theme-hyperlink)]GetLastError.

回复

使用道具 举报

273#
发表于 2022-9-19 21:19:45 | 只看该作者
本帖最后由 gbzx 于 2022-9-20 09:10 编辑

在使用自动匹配DPI时,总觉得图标没变大。今天发现是ENVI @@DeskTopFresh=1的问题,虽画面不闪,但图标没变大。我点kill explorer.exe刷新,图标变大了,于是我把原来代码改成如下:

//获取屏幕分辨率
DISP  ? &CUR
MSTR* curx=<2>%&CUR%  //<1>截取屏幕横向分辨率,并赋值curx。<2>截取屏幕纵向分辨率,并赋值curx。
//获取系统推荐DPI
ENVI$# &pvParam=*4 0
CALL $--bool --qd --ret:&SystemParametersInfoWRet user32.dll,SystemParametersInfoW,#158,0,*&pvParam,1
ENVI?ints &pvParam=&DPI0
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
//开机自动匹配DPI缩放
ifex $%curx%>=720,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI0%,0,1  //HD
ifex $%curx%>=1080,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI1%,0,1  //FHD
ifex $%curx%>=1440,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI2%,0,1  //2K
ifex $%curx%>=2160,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI3%,0,1  //4K
ifex $%curx%>=4320,CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI4%,0,1  //8K
kill explorer.exe
//注册右键DPI缩放菜单
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\SubCommands=
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\MUIVerb=DPI设置(&Z)
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\Icon=X:\Windows\Resources\Icons\Display.dll_1.ico
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\Position=Bottom
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor0\MUIVerb=缩放比例 100%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor0\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI0%,0,1| kill explorer.exe
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\MUIVerb=缩放比例 125%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI1%,0,1| kill explorer.exe
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor2\MUIVerb=缩放比例 150%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor2\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI2%,0,1| kill explorer.exe
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor3\MUIVerb=缩放比例 175%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor3\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI3%,0,1| kill explorer.exe
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor4\MUIVerb=缩放比例 200%%
REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor4\command\=PECMD.EXE TEAM CALL $--bool --qd# user32.dll,SystemParametersInfoW,159,%&DPI4%,0,1| kill explorer.exe
修改前桌面截图









修改后截图









其中我的电脑图标和傲梅分区助手图标变化最大
回复

使用道具 举报

274#
发表于 2022-12-24 23:32:06 | 只看该作者
正好遇到同样问题,先收藏再学习
回复

使用道具 举报

275#
发表于 2023-10-30 01:13:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

276#
发表于 2024-6-8 07:29:14 | 只看该作者
lhc0688 发表于 2022-4-26 10:07
Windows Registry Editor Version 5.00

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


路过学习了
回复

使用道具 举报

277#
发表于 2024-6-8 07:31:04 | 只看该作者
可以可以
回复

使用道具 举报

278#
发表于 2024-6-16 12:32:50 来自手机 | 只看该作者
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-6-25 13:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表