找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: lhc0688

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

   火... [复制链接]
发表于 2022-5-27 09:15:10 | 显示全部楼层
比较关心缩小能不能用函数来整。缩小屏幕上能够显示更多东西,只要显示器够大够清晰,眼力足够好,也是有用的
回复

使用道具 举报

发表于 2022-5-27 09:17:17 | 显示全部楼层
还是再增加两个比例,50%,75%反正用注册表法可以实现

点评

缩小? 50% 出现过?从现实来说,好像没出现过 dpi48的设备(特殊的除外),crt显示器 已经 dpi 72 了 [attachimg]502053[/attachimg]  详情 回复 发表于 2022-5-27 13:50
回复

使用道具 举报

发表于 2022-5-27 10:45:31 | 显示全部楼层
527104427 发表于 2022-5-27 09:54
不是没仔细看,而是没整明白。原来暗含着计算公式:
最大dpi=垂分辨率/720

就是感觉这个结论得出的一步走得太远了,所以来强调一下。
回复

使用道具 举报

发表于 2022-5-27 13:50:32 | 显示全部楼层
本帖最后由 2011whp 于 2022-5-27 13:55 编辑
hhh333 发表于 2022-5-27 09:17
还是再增加两个比例,50%,75%反正用注册表法可以实现

缩小?

50% 出现过?从现实来说,好像没出现过 dpi48的设备(特殊的除外),crt显示器 已经 dpi 72 了
dpi放大2.jpg

估计:ppi

       1.  ppi ≥ 48
       2.   垂直分辨率/ppi > 6.25英寸

点评

经过测试,Win7/8可以通过注册表设置为%50、75%,Win8.1以上最低是100%即96,这个值在注销以后再进桌面看HKCU\Control Panel\Desktop\WindowMetrics\AppliedDPI又恢复到96,不知道有不有强制的方法。  详情 回复 发表于 2022-5-27 15:30
回复

使用道具 举报

发表于 2022-5-27 15:30:59 | 显示全部楼层
本帖最后由 hhh333 于 2022-5-27 20:06 编辑
2011whp 发表于 2022-5-27 13:50
缩小?

50% 出现过?从现实来说,好像没出现过 dpi48的设备(特殊的除外),crt显示器 已经 dpi 72 了 ...

经过测试,Win7/8可以通过注册表设置为50%、75%,Win8.1以上最低是100%即96,这个值HKCU\Control Panel\Desktop\WindowMetrics\AppliedDPI在注销以后再进桌面看又恢复到96,不知道有不有强制的方法。
w10-15.PNG

又修改了一下,支持出现75%,50%等100%以下的菜单项(修改脚本的SeqBase变量为-2,可以不出现50%菜单项,-1可以不出现75%菜单项): setdpi.7z (4.65 KB, 下载次数: 22)
5大说不玩了,都散了吧?



回复

使用道具 举报

发表于 2022-5-27 21:16:03 | 显示全部楼层
527104427 发表于 2022-5-27 19:51
按照大佬们指点的最大dpi计算公式,在注销前先来个友好提醒,默认选否,免得没保存手头的工作就被干掉 ...

1、SystemParametersInfoW的158返回必须这<=0的数吗?在什么情况下返回非零的数?
2、观察到的SystemParametersInfoW158功能异常在Win10以下的系统如win8/8.1都有,而恰恰SystemParametersInfoW功能可以说对win10以下的系统都没用,反正都是用注册表注销法的。因此可以更简单一点,只要是win10以下系统在非system用户下,直接改注册表注销,否则什么也不干;
回复

使用道具 举报

发表于 2022-5-27 22:48:55 | 显示全部楼层
本帖最后由 hhh333 于 2022-5-27 22:50 编辑
527104427 发表于 2022-5-27 19:51
按照大佬们指点的最大dpi计算公式,在注销前先来个友好提醒,默认选否,免得没保存手头的工作就被干掉 ...

这是在win8.1中运行你的程序的log
麻烦看一下: setdpi.7z (5.84 KB, 下载次数: 6)
158运行50次也不行,但再进入恢复正常
  1. set$# pvParam=*4 0
  2. call $--bool --qd --ret:ret158 user32.dll,SystemParametersInfoW,#158,0,*pvParam,1
  3. set?ints pvParam=vParam
  4. call $--qd# --ret:ret159 user32.dll,SystemParametersInfoW,159,0,0,1
  5. mess pvParam=%pvParam% vParam=%vParam% %ret158% %ret159%
复制代码
上面代码运行两次,第二次数据正常


81-158.PNG

但是文件内函数调用N次数据就不对
回复

使用道具 举报

发表于 2022-5-28 09:07:11 | 显示全部楼层
527104427 发表于 2022-5-28 00:21
我记得win7是负数。
那这就没办法了。

把逻辑重新整理一下:
1、Win10以下,不用函数,如果是非SYSTEM用户则写注册表然后注销,否则退出;有效避免了函数在这些系统中各种异常结果;
2、Win10以上,先用函数,超过函数范围,并且非SYSTEM用户则写注册表然后注销,否则只是函数作用后的结果;
3、每次写注册表+注销前进行询问确认;
4、maxautodpi既然是固定的就直接用查表法,用计算法还麻烦些还得规范计算结果;


回复

使用道具 举报

发表于 2022-5-28 10:01:27 | 显示全部楼层
本帖最后由 hhh333 于 2022-5-28 17:15 编辑
527104427 发表于 2022-5-28 00:21
我记得win7是负数。
那这就没办法了。

把逻辑重新整理一下: setdpi.7z (4.53 KB, 下载次数: 35)
1、Win10以下,不用函数,如果是非SYSTEM用户则写注册表然后注销,否则退出;有效避免了函数在这些系统中各种异常结果;
2、Win10以上,先用函数,超过函数范围,并且非SYSTEM用户则写注册表然后注销,否则只是函数作用后的结果;
3、每次写注册表+注销前进行询问确认;
4、maxautodpi既然是固定的就直接用查表法,用计算法还麻烦些还得规范计算结果;

注:调试这个的时候,如果有注销,PE中 SYSTEM/Administrator切换时会导致切Admin后又切回SYSREM再次切回admin会出问题,再次回切admin使用的是tscon 2,而这个已经被注销了所以就切不回了,使用tscon 3可以成功,经反复测试,如果注销偶数次,用编号2,奇数次用3可以再切回。因此在再次切回Admin的命令中两个都写上。
  1. `再次登录Admin
  2. _SUB Admin2
  3. EXEC !TSCON 2
  4. EXEC !TSCON 3        //注销后再进入的为编号3
  5. _END
复制代码



回复

使用道具 举报

发表于 2022-5-28 14:56:19 | 显示全部楼层
楼主厉害了
回复

使用道具 举报

发表于 2022-5-28 19:17:56 | 显示全部楼层
527104427 发表于 2022-5-28 00:21
我记得win7是负数。
那这就没办法了。

请问:
call $--ret:LogPixels Gdi32.dll,GetDeviceCaps,#%hdc%,#90         //dpi高      //#88为宽
前面用88也没有出错啊?这个有讲究吗?
回复

使用道具 举报

发表于 2022-5-28 21:31:19 | 显示全部楼层
527104427 发表于 2022-5-28 20:25
昨天红毛悄悄告诉我,win10.0.14393 以上系统才支持SystemParametersInfoW函数,好吧,再接着改!
把推 ...

win7与其他不同?最大DPI低些?
回复

使用道具 举报

发表于 2022-5-29 07:02:36 | 显示全部楼层
527104427 发表于 2022-5-29 00:11
我这是如此。测试环境单调,没啥权威性

应该不对,我这个Win7是1440X900,最大DPI就是150%
w7.png
刚好是900/600*100
回复

使用道具 举报

发表于 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
复制代码


回复

使用道具 举报

发表于 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
回复

使用道具 举报

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

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

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

使用道具 举报

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

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

使用道具 举报

发表于 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
复制代码

咸得蛋疼测了下耗时:
捕获.PNG

回复

使用道具 举报

发表于 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多微秒,每次都是
回复

使用道具 举报

发表于 2022-5-30 20:10:07 | 显示全部楼层
最新版運算很吃資源嗎?
在VM中測試.因為資源不足而卡住了
分配RAM是4G的
回复

使用道具 举报

发表于 2022-5-30 23:01:09 | 显示全部楼层
後來再試又都沒問題了.
主機負荷吃重影響到VM嗎?
真奇怪

点评

PE里的VM还是VM里的PE?  详情 回复 发表于 2022-6-1 09:20
回复

使用道具 举报

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

使用道具 举报

发表于 2022-6-1 09:20:35 | 显示全部楼层
saiz 发表于 2022-5-30 23:01
後來再試又都沒問題了.
主機負荷吃重影響到VM嗎?
真奇怪

PE里的VM还是VM里的PE?

点评

VM裡的PE  详情 回复 发表于 2022-6-1 18:22
回复

使用道具 举报

发表于 2022-6-1 16:14:08 | 显示全部楼层
527104427 发表于 2022-6-1 10:40
现在都是自动计算的。
非得改的话,把这段:
_sub SetAutoDpi *

这个合理一点
回复

使用道具 举报

发表于 2022-6-1 17:02:38 | 显示全部楼层
527104427 发表于 2022-6-1 16:40
感觉搞个GUI挺好的,有时间慢慢玩

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

使用道具 举报

发表于 2022-6-1 18:22:19 | 显示全部楼层
szwp 发表于 2022-6-1 09:20
PE里的VM还是VM里的PE?

VM裡的PE
回复

使用道具 举报

发表于 2022-6-1 18:22:45 | 显示全部楼层
527104427 发表于 2022-6-1 10:40
现在都是自动计算的。
非得改的话,把这段:
_sub SetAutoDpi *

感謝!!
回复

使用道具 举报

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

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

使用道具 举报

发表于 2022-9-10 11:08:31 | 显示全部楼层
dpi的数值可以直接设96吗?
回复

使用道具 举报

发表于 2022-9-10 16:38:31 | 显示全部楼层
527104427 发表于 2022-5-29 22:50
添加 /s  和  /auto 参数
所有参数可以写一起,没有顺序之分
pecmd    load    setdpi.wcs    /s     /re ...

谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-20 11:44

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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