无忧启动论坛

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

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

    [复制链接]
241#
发表于 2022-5-29 07:02:36 | 只看该作者
527104427 发表于 2022-5-29 00:11
我这是如此。测试环境单调,没啥权威性

应该不对,我这个Win7是1440X900,最大DPI就是150%

刚好是900/600*100

点评

这我知道,但微软官方给的公式就是 分辨率高/720,多少还是给他些尊重吧 [attachimg]502144[/attachimg] https://docs.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/dpi-related-apis-and-registry  详情 回复 发表于 2022-5-29 07:48
回复

使用道具 举报

242#
发表于 2022-5-29 07:35:42 | 只看该作者
527104427 发表于 2022-5-29 00:11
我这是如此。测试环境单调,没啥权威性

另外,规范dpi是不是不用判断两个条件
  1. `规范dpi档次
  2. ifex $%dpi%<50, set dpi=25
  3. ifex $%dpi%>50, set dpi=50
  4. ifex $%dpi%>75, set dpi=75
  5. ifex $%dpi%>100, set dpi=100
  6. ifex $%dpi%>125, set dpi=125
  7. ifex $%dpi%>150, set dpi=150
  8. ifex $%dpi%>175, set dpi=175
  9. ifex $%dpi%>200, set dpi=200
  10. ifex $%dpi%>225, set dpi=225
  11. ifex $%dpi%>250, set dpi=250
  12. ifex $%dpi%>300, set dpi=300
  13. ifex $%dpi%>350, set dpi=350
  14. ifex $%dpi%>400, set dpi=400
  15. ifex $%dpi%>450, set dpi=450
  16. ifex $%dpi%>500, set dpi=500
复制代码


点评

仔细看了一下你这个代码,貌似不对哦,假如传入的dpi=600,在第二句就被阻断了,变成dpi=50了,后面肯定都不能执行。  详情 回复 发表于 2022-5-29 12:11
回复

使用道具 举报

243#
发表于 2022-5-29 09:10:42 | 只看该作者
527104427 发表于 2022-5-29 07:48
这我知道,但微软官方给的公式就是  分辨率高/720,多少还是给他些尊重吧

https://docs.microsoft.com ...

我那判断看起来简洁但容易出错,上面就是错的,要把值先保存一下,再判断,还得改>为>=

点评

setdpi.cmd 安装 dpi右键,能接收参数: 最好 根据情况 默认安装,可靠的 不用注销的 放大级 这种情况,适合 所见 所得,不容易把 初始 使用的人 带进 旋涡(用的时候,谁也不想 回忆 知识) 全部  详情 回复 发表于 2022-5-29 11:54
回复

使用道具 举报

244#
发表于 2022-5-29 11:54:45 | 只看该作者
hhh333 发表于 2022-5-29 09:10
我那判断看起来简洁但容易出错,上面就是错的,要把值先保存一下,再判断,还得改>为>=

setdpi.cmd  安装 dpi右键,能接收参数:

最好 根据情况  默认安装,可靠的 不用注销的 放大级
          这种情况,适合 所见 所得,不容易把 初始 使用的人 带进 旋涡(用的时候,谁也不想 回忆 知识)
全部 放大级别的话 用,setdpi.cmd  /pro
          研究的 人用 ,或特殊情况下用,
           

点评

我一直不建议将可靠的、不用注销的dpi作为右键菜单极限值,因为这个值会随分辨率变化而改变。 况且现在注销前一定会提示,不点确定是不会注销的。不会给人造成任何困扰。  详情 回复 发表于 2022-5-29 12:02
回复

使用道具 举报

245#
发表于 2022-5-29 12:15:47 | 只看该作者
本帖最后由 2011whp 于 2022-5-29 12:26 编辑
527104427 发表于 2022-5-29 12:02
我一直不建议将可靠的、不用注销的dpi作为右键菜单极限值,因为这个值会随分辨率变化而改变。
况且现在 ...

嗯, 有提示,能取消,这种情况  能接收滴。
大部分时候是试验下感觉
比如,我这台机1920屏,125%就最好,
                  150%感觉就 大条了(画点想法用的  美明画图,编辑区 小了)
回复

使用道具 举报

246#
发表于 2022-5-29 12:40:45 | 只看该作者
本帖最后由 hhh333 于 2022-5-29 13:23 编辑
527104427 发表于 2022-5-29 12:11
仔细看了一下你这个代码,貌似不对哦,假如传入的dpi=600,在第二句就被阻断了,变成dpi=50了,后面肯 ...

是的有问题,如下改下也可:
  1. set d=%dpi%
  2. ifex $%d%<50, set dpi=25
  3. ifex $%d%>=50, set dpi=50
  4. ifex $%d%>=75, set dpi=75
  5. ifex $%d%>=100, set dpi=100
  6. ifex $%d%>=125, set dpi=125
  7. ifex $%d%>=150, set dpi=150
  8. ifex $%d%>=175, set dpi=175
  9. ifex $%d%>=200, set dpi=200
  10. ifex $%d%>=225, set dpi=225
  11. ifex $%d%>=250, set dpi=250
  12. ifex $%d%>=300, set dpi=300
  13. ifex $%d%>=350, set dpi=350
  14. ifex $%d%>=400, set dpi=400
  15. ifex $%d%>=450, set dpi=450
  16. ifex $%d%>=500, set dpi=500
复制代码

咸得蛋疼测了下耗时:


回复

使用道具 举报

247#
发表于 2022-5-29 13:41:02 | 只看该作者
hhh333 发表于 2022-5-29 12:40
是的有问题,如下改下也可:

咸得蛋疼测了下耗时:

哈哈哈,这是强迫症犯了吧?
回复

使用道具 举报

248#
发表于 2022-5-29 13:56:10 | 只看该作者
本帖最后由 hhh333 于 2022-5-29 13:59 编辑
527104427 发表于 2022-5-29 13:41
哈哈哈,这是强迫症犯了吧?

哈哈,我们都太笨了。根本不必这么写,愚蠢限制了我们的想像力
  1. ifex $%dpi%>250,set v=50!set v=25
  2. calc dpi=int(%dpi%/%v%)*%v%
  3. ifex $%dpi%<50, set dpi=25
  4. ifex $%dpi%>500, set dpi=500
复制代码
永远是这几条
节约400多微秒,每次都是
回复

使用道具 举报

249#
发表于 2022-5-29 14:06:06 | 只看该作者
hhh333 发表于 2022-5-29 13:56
哈哈,我们都太笨了。根本不必这么写,愚蠢限制了我们的想像力
永远是这几条
节约400多微秒,每次都是{ ...

这个帅啊!666
回复

使用道具 举报

250#
发表于 2022-5-29 22:50:36 | 只看该作者
本帖最后由 527104427 于 2022-5-30 11:56 编辑

添加 /s  和  /auto 参数
所有参数可以写一起,没有顺序之分
pecmd    load    setdpi.wcs    /s     /reg    /auto
pecmd    load    setdpi.wcs    150   /reg    /s

setdpi.7z (4.25 KB, 下载次数: 90)




回复

使用道具 举报

251#
发表于 2022-5-30 20:10:07 | 只看该作者
最新版運算很吃資源嗎?
在VM中測試.因為資源不足而卡住了
分配RAM是4G的
回复

使用道具 举报

252#
发表于 2022-5-30 20:49:59 | 只看该作者
saiz 发表于 2022-5-30 20:10
最新版運算很吃資源嗎?
在VM中測試.因為資源不足而卡住了
分配RAM是4G的

不会啊,命令都是明码,看不出来有问题,
你在wcs第一句加上:
LOGS **t=1 **ON=1 **2 * "C:\XXX.LOG"
看看具体情况。
回复

使用道具 举报

253#
发表于 2022-5-30 23:01:09 | 只看该作者
後來再試又都沒問題了.
主機負荷吃重影響到VM嗎?
真奇怪
回复

使用道具 举报

254#
发表于 2022-6-1 09:04:25 | 只看该作者
請問下.我覺得1920*1080時 125%看起來較舒服
那我要在setdpi.wcs修改哪裡才可以自動縮放?
回复

使用道具 举报

255#
发表于 2022-6-1 09:20:35 | 只看该作者
saiz 发表于 2022-5-30 23:01
後來再試又都沒問題了.
主機負荷吃重影響到VM嗎?
真奇怪

PE里的VM还是VM里的PE?
回复

使用道具 举报

256#
发表于 2022-6-1 10:40:06 | 只看该作者
saiz 发表于 2022-6-1 09:04
請問下.我覺得1920*1080時 125%看起來較舒服
那我要在setdpi.wcs修改哪裡才可以自動縮放?

现在都是自动计算的。
非得改的话,把这段:
_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



回复

使用道具 举报

257#
发表于 2022-6-1 16:14:08 | 只看该作者
527104427 发表于 2022-6-1 10:40
现在都是自动计算的。
非得改的话,把这段:
_sub SetAutoDpi *

这个合理一点
回复

使用道具 举报

258#
发表于 2022-6-1 16:40:03 | 只看该作者


感觉搞个GUI挺好的,有时间慢慢玩


回复

使用道具 举报

259#
发表于 2022-6-1 17:02:38 | 只看该作者
527104427 发表于 2022-6-1 16:40
感觉搞个GUI挺好的,有时间慢慢玩

也是一种方案,估计使用右键菜单习惯些
回复

使用道具 举报

260#
发表于 2022-6-1 18:22:19 | 只看该作者
szwp 发表于 2022-6-1 09:20
PE里的VM还是VM里的PE?

VM裡的PE
回复

使用道具 举报

261#
发表于 2022-6-1 18:22:45 | 只看该作者
527104427 发表于 2022-6-1 10:40
现在都是自动计算的。
非得改的话,把这段:
_sub SetAutoDpi *

感謝!!
回复

使用道具 举报

262#
发表于 2022-9-10 11:07:39 | 只看该作者
hhh333 发表于 2022-5-28 10:01
把逻辑重新整理一下:
1、Win10以下,不用函数,如果是非SYSTEM用户则写注册表然后注销,否则退出;有效 ...

setdpi是放的哪个位置的呢?
回复

使用道具 举报

263#
发表于 2022-9-10 11:08:31 | 只看该作者
dpi的数值可以直接设96吗?
回复

使用道具 举报

264#
发表于 2022-9-10 16:38:31 | 只看该作者
527104427 发表于 2022-5-29 22:50
添加 /s  和  /auto 参数
所有参数可以写一起,没有顺序之分
pecmd    load    setdpi.wcs    /s     /re ...

谢谢
回复

使用道具 举报

265#
发表于 2022-9-11 11:17:30 | 只看该作者
        很给力!
回复

使用道具 举报

266#
发表于 2022-9-11 14:04:37 | 只看该作者
谢谢分享
回复

使用道具 举报

267#
发表于 2022-9-12 10:14:01 | 只看该作者
2013koko 发表于 2022-5-2 18:46
我觉得可以直接从 159,0,0,1 来往两边分,不用写具体的缩放值。因为这个就是系统推荐的缩放比例。
推荐 ...

放大一级代码:
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

请问高手:缩小一级
代码是如何写?
回复

使用道具 举报

268#
发表于 2022-9-13 09:46:11 | 只看该作者
本帖最后由 gbzx 于 2022-9-13 21:54 编辑
红毛樱木 发表于 2022-4-29 15:09
其中 %&vParam% 为当前系统默认DPI拉伸值与100%对应关系。
假设如果你获取到的值是-2,那 ...

请问大师,代码: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,不会了,

回复

使用道具 举报

269#
发表于 2022-9-14 16:44:57 | 只看该作者
gbzx 发表于 2022-9-13 09:46
请问大师,代码:CALL $--bool --qd --ret:&Ret user32.dll,SystemParametersInfo,#158,0,*&pvParam,1获 ...

[CALL $--qd# user32.dll,SystemParametersInfoW,159,,0,1]        <1>        :函数不正确

日志里反应出来了吧,第二个参数空了没传进去
回复

使用道具 举报

270#
发表于 2022-9-14 19:45:40 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 12:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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