正好遇到同样问题,先收藏再学习 |
本帖最后由 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 修改前桌面截图 修改后截图 其中我的电脑图标和傲梅分区助手图标变化最大 |
gbzx 发表于 2022-9-14 21:36 你这里的显示都没问题了呀。 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. |
本帖最后由 gbzx 于 2022-9-14 21:46 编辑 红毛樱木 发表于 2022-9-14 16:44 我是套用作者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 |
谢谢分享 |
gbzx 发表于 2022-9-13 09:46 [CALL $--qd# user32.dll,SystemParametersInfoW,159,,0,1] <1> :函数不正确 日志里反应出来了吧,第二个参数空了没传进去 |
本帖最后由 gbzx 于 2022-9-13 21:54 编辑 红毛樱木 发表于 2022-4-29 15:09 请问大师,代码:CALL $--bool --qd --ret:&Ret user32.dll,SystemParametersInfo,#158,0,*&pvParam,1获取DPI值正常,但设置DPI值:CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI0%,0,1会出现 [CALL $--qd# user32.dll,SystemParametersInfoW,159,,0,1] <1> :函数不正确 [CALL $--qd# user32.dll,SystemParametersInfoW,159,1,0,1] <1> :函数不正确。 是啥问题,但执行后,图标会相应变化 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 检查出二方面问题 第一方面,我是套用作者Bluebells 的代码,获取PDI代码 CALL $--bool --qd --ret:&SystemParametersInfoWRet user32.dll,SystemParametersInfoW,#158,0,*&pvParam,1正常,但设置PDI代码 CALL $--qd# user32.dll,SystemParametersInfoW,159,%&DPI2%,0,1 就会提示“函数不正确”,增加参数--bool就不会了。 第二方面,Win10 x86 PE,估计精简过度也不知是注册表还是缺文件,在64为Win10正常情况下,移植到Win10 x86 PE,还出现“函数不正确”,估计注册表概率更大。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 换一个Win10 x86 PE,不会了, |
2013koko 发表于 2022-5-2 18:46 放大一级代码: REGI $HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DesktopBackground\Shell\SetDPI\shell\ZoomFactor1\MUIVerb= =放大一级 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 请问高手:缩小一级 代码是如何写? |
谢谢分享 |
很给力! |
527104427 发表于 2022-5-29 22:50 谢谢 |
dpi的数值可以直接设96吗? |
hhh333 发表于 2022-5-28 10:01 setdpi是放的哪个位置的呢? |
527104427 发表于 2022-6-1 10:40 感謝!! |
szwp 发表于 2022-6-1 09:20 VM裡的PE |
527104427 发表于 2022-6-1 16:40 也是一种方案,估计使用右键菜单习惯些 |
hhh333 发表于 2022-6-1 16:14 感觉搞个GUI挺好的,有时间慢慢玩 |
527104427 发表于 2022-6-1 10:40 这个合理一点 |
saiz 发表于 2022-6-1 09:04 现在都是自动计算的。 非得改的话,把这段: _sub SetAutoDpi * find *=dpi, {* find *<>RelativeIndex, {* //https://www.codenong.com/35233182/ set RecommendIndex=0 //0为系统推荐值,系统自动算的,可能是100%,也可能是350% calc i0=(%RecommendIndex%-%RelativeIndex%)-6 //计算250%以上的步进数(步进单位为50%) ifex $%i0%>0, calc dpi=int(6*25+%i0%*50+100)! calc dpi=int[(%RecommendIndex%-%RelativeIndex%)*25+100] }! {* //推荐dpi计算公式:最大dpi/1.5 calc dpi=int(%MaxDpiOld%/1.5) call CheckDpiRange dpi } } _end 换成: _sub SetAutoDpi * find *=dpi, {* //根据分辨率设定自动DPI值 set dpi=100 ifex $%DeskTopVertRes%>=480, set dpi=100 //DV(480p) //720*480 ifex $%DeskTopVertRes%>=720, set dpi=100 //HD(720p) //1280*720 ifex $%DeskTopVertRes%>=1080, set dpi=125 //1K(1080p、Full HD、FHD) //16:9 1920*1080 //16:10 1920*1200 //一般:1920*1080,虽然具有近 2000 像素的水平分辨率,但在大部分的媒体,包括网页制作以及影像制作,书籍等都认为 1080p 与 2K 分辨率为不同的分辨率而非相同,并不是标准的2K,但因为1080p具有近 2000 像素的水平分辨率,因此1080p可以被归类为2K,而非1K。 ifex $%DeskTopVertRes%>=1152, set dpi=150 //2K //2048*1152 ifex $%DeskTopVertRes%>=1440, set dpi=175 //2.5K //WQXGA:2560*1600 //Quad HD:2560*1440 ifex $%DeskTopVertRes%>=2160, set dpi=200 //4K //一般:4096*2160 //Full Aperture 4K:4096*3112 //Academy 4K:3656*2664 //UHDTV标准:3840*2160 ifex $%DeskTopVertRes%>=4320, set dpi=300 //8K //7680*4320 } _end |
saiz 发表于 2022-5-30 23:01 PE里的VM还是VM里的PE? |
saiz 发表于 2022-5-30 20:10 不会啊,命令都是明码,看不出来有问题, 你在wcs第一句加上: LOGS **t=1 **ON=1 **2 * "C:\XXX.LOG" 看看具体情况。 |
hhh333 发表于 2022-5-29 13:56 这个帅啊!666 |
本帖最后由 hhh333 于 2022-5-29 13:59 编辑 527104427 发表于 2022-5-29 13:41 哈哈,我们都太笨了。根本不必这么写,愚蠢限制了我们的想像力
节约400多微秒,每次都是 |
hhh333 发表于 2022-5-29 12:40 哈哈哈,这是强迫症犯了吧? |
本帖最后由 hhh333 于 2022-5-29 13:23 编辑 527104427 发表于 2022-5-29 12:11 是的有问题,如下改下也可:
咸得蛋疼测了下耗时: |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.