无忧启动论坛

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

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

    [复制链接]
211#
发表于 2022-5-26 14:34:45 | 只看该作者
527104427 发表于 2022-5-26 10:15
设置不了,但可以查询。只要查询到建议值,直接干注册表
根据微软官方的说法是这么理解的,查询支持win2 ...

用数字0调用即是推荐值(自动值)和能够直达的最大值也是猜的呀

点评

自动值不是猜的,最大值目前不知道怎么计算,只能猜了  详情 回复 发表于 2022-5-26 15:24
回复

使用道具 举报

212#
发表于 2022-5-26 16:35:54 | 只看该作者
527104427 发表于 2022-5-26 15:24
自动值不是猜的,最大值目前不知道怎么计算,只能猜了

精确对值不用猜

点评

谢谢,这个硬核!先学习下  详情 回复 发表于 2022-5-26 17:26
回复

使用道具 举报

213#
发表于 2022-5-26 16:57:11 | 只看该作者
527104427 发表于 2022-5-26 15:24
自动值不是猜的,最大值目前不知道怎么计算,只能猜了

微软自己都没搞定所有显示器的dpi问题,根据分辨率和当前dpi来设定简单粗爆,没必要浪费太多时间在dpi上

点评

这是兴趣的问题,不是时间的问题。我目前只有一个23寸显示器,什么都测不了  详情 回复 发表于 2022-5-26 17:29
回复

使用道具 举报

214#
发表于 2022-5-26 17:03:21 | 只看该作者
pe自身就能自适应dpi,除了面对苹果电脑其他都能自适应,不能自适应dpi的pe就应该修一下,自适应dpi能适配大多数屏幕
回复

使用道具 举报

215#
发表于 2022-5-26 17:05:25 | 只看该作者
2k及以上分辨率的笔记本启动pe很容易测试是否自适应dpi
回复

使用道具 举报

216#
发表于 2022-5-26 17:38:45 | 只看该作者
527104427 发表于 2022-5-26 17:29
这是兴趣的问题,不是时间的问题。我目前只有一个23寸显示器,什么都测不了

我有一个笔记本。完全自适应dpi
回复

使用道具 举报

217#
发表于 2022-5-26 18:15:22 | 只看该作者
本帖最后由 hhh333 于 2022-5-27 07:13 编辑
527104427 发表于 2022-5-26 17:29
这是兴趣的问题,不是时间的问题。我目前只有一个23寸显示器,什么都测不了

主要是兴趣玩一下,顺便跟大佬们学习一下PECMD脚本,也蛮有意思。
又把脚本修改了一下: setdpi.7z (4.35 KB, 下载次数: 24)
1、ret158>0,ret159应该也>0,因此我的脚本检测ret159>0再刷新有点画蛇添足;
2、我的前面程序存在一个目标DPI值只要通过注册表法时标志的是上一次的当前DPI,这次修正了;
3、只要是采用注销法,刷新桌面就没有意义了,这次改了。

点评

根据 227# 大佬发的表格,ppi最高的只有183.58,换算成dpi顶多也只有200%,貌似没有200%以上的,这个你怎么看  详情 回复 发表于 2022-5-26 18:33
回复

使用道具 举报

218#
发表于 2022-5-26 19:49:45 | 只看该作者
本帖最后由 2011whp 于 2022-5-26 20:13 编辑
527104427 发表于 2022-5-26 18:33
根据 227# 大佬发的表格,ppi最高的只有183.58,换算成dpi顶多也只有200%,貌似没有200%以上的,这个你怎 ...

227# 那个表是  物理显示器  制造参数,用PPI不准确

我认同 红毛大  的说法:PPI是 图形模型→显示缓冲  计算用的



同样的显示 信号:
    如果 是城市 广场 显示屏 :  1920 × 1080  按dpi=8 制造的,本身很大的
    如果  电脑显示器: 1920 × 1080  按dpi=96 制造的,这是常规映像
    如果   笔记本:      1920 × 1080  按dpi=128 制造的,感觉会小些
    假如   虚拟制造屏:1920 × 1080  按dpi=PPI 制造的, 用眼看,是最等于  图形模型的

——————————————————————————————————————
现在的实践表明:(隐约 在受#223楼 那种 制约)
     1920屏 : 最多放大 175%
      3840屏: 最多放大 350%
   因为现在显示技术方向  要 脱 离dpi,走向模型的 实际尺寸(或叫 图纸尺寸)            在PPI屏 上,模型是没有放大的,只是 实际屏的 dpi 给人的视觉 放大了

点评

你的意思是这样的吧: 1920x1080计算最大dpi:6.25/1080/96=1.8(约175%) 3840x2160计算最大dpi:6.25/2160/96=3.01(约300%) 这也不是350%啊 有没有一个通用的计算公式?  详情 回复 发表于 2022-5-26 20:48
回复

使用道具 举报

219#
发表于 2022-5-26 20:48:32 | 只看该作者
527104427 发表于 2022-5-26 18:33
根据 227# 大佬发的表格,ppi最高的只有183.58,换算成dpi顶多也只有200%,貌似没有200%以上的,这个你怎 ...

没有大分辨率的屏不好试
回复

使用道具 举报

220#
发表于 2022-5-26 20:48:36 | 只看该作者
本帖最后由 527104427 于 2022-5-26 20:53 编辑
2011whp 发表于 2022-5-26 19:49
227# 那个表是  物理显示器  制造参数,用PPI不准确

我认同 红毛大  的说法:PPI是 图形模型→显示缓 ...

你的意思是这样的吧:
1920x1080计算最大dpi:1080/6.25/96=1.8(约175%)
3840x2160计算最大dpi:2160/6.25/96=3.6(约350%)  
不知道这个计算公式通不通用?

点评

基本对得上 900-1.5 1080-1.8  详情 回复 发表于 2022-5-26 21:11
回复

使用道具 举报

221#
发表于 2022-5-26 21:11:07 | 只看该作者
527104427 发表于 2022-5-26 20:48
你的意思是这样的吧:
1920x1080计算最大dpi:1080/6.25/96=1.8(约175%)
3840x2160计算最大dpi:2160/6 ...

基本对得上
900-1.5
1080-1.8

点评

1600/96/6.25=2.667 [attachimg]502006[/attachimg]  详情 回复 发表于 2022-5-26 21:38
那这个分辨率应该是最大分辨率,而不是当前的分辨率吧? 是的话,那又能整活了  详情 回复 发表于 2022-5-26 21:25
回复

使用道具 举报

222#
发表于 2022-5-26 21:29:06 | 只看该作者
527104427 发表于 2022-5-26 21:25
那这个分辨率应该是最大分辨率,而不是当前的分辨率吧?
猜想正确的话,那又能整活了

500算起来只要3000,4320对应的是7.2

点评

试了一下,居然是按当前分辨率算的,改了分辨率,最大DPI也跟着改! 你说的问题好解决,大于500%的一律按500%算。  详情 回复 发表于 2022-5-26 21:34
回复

使用道具 举报

223#
发表于 2022-5-26 21:38:28 | 只看该作者
本帖最后由 2011whp 于 2022-5-26 21:40 编辑
hhh333 发表于 2022-5-26 21:11
基本对得上
900-1.5
1080-1.8

  1600/96/6.25=2.667  (vbox 估计永远是 96)

回复

使用道具 举报

224#
发表于 2022-5-26 22:14:20 | 只看该作者
527104427 发表于 2022-5-26 21:34
试了一下,居然是按当前分辨率算的,改了分辨率,最大DPI也跟着改!
你说的问题好解决,大于500%的一律 ...

假如win,是知道 你的显示器尺寸

   23.8寸: 1920时:50厘米 = 96dpi  (1920/96*2.54=50)
                 1440时:50厘米 =  72dpi   (1440/x*2.54=50)

     那说明 win 系统的dpi 一般是 显示器最大dpi ,切换分辨率 不影响
     (不懂,从现象推测)

   

点评

我发现你的发言都很有水平,受益匪浅,只是有些不好理解  详情 回复 发表于 2022-5-26 23:33
回复

使用道具 举报

225#
发表于 2022-5-27 06:24:14 | 只看该作者
本帖最后由 hhh333 于 2022-5-27 07:26 编辑
527104427 发表于 2022-5-26 21:34
试了一下,居然是按当前分辨率算的,改了分辨率,最大DPI也跟着改!
你说的问题好解决,大于500%的一律 ...


win8pe中有个超级怪现象,如果先切到125%,再切自动,屏幕会变成75%;如果先切到150%,再切自动屏幕会变成50%,图标缩小一半差不多看不清了。
经追踪,是因为call $--bool --qd --ret:ret158 user32.dll,SystemParametersInfoW,#158,0,*pvParam,1这个函数在切125注销后第一次运行,vParam将返回1;同样切150%以后第一次运行vParam将返回2;
因此导致返回1的算出的DPI为75%,返回2的为50%;但奇怪的是第二次运行函数又正常了,vParam返回0
刚才在脚本中运行两次158也不行,但在PECMD窗口中直接运行,第一次不正常,第二次正常。
目前只有加一条ifex $%dpi%<100, set dpi=100



回复

使用道具 举报

226#
发表于 2022-5-27 07:19:19 | 只看该作者
本帖最后由 hhh333 于 2022-5-27 07:41 编辑
527104427 发表于 2022-5-26 23:33
我发现你的发言都很有水平,受益匪浅,只是有些不好理解

SystemParametersInfoW函数可不可以设成75%或50%?既然是缩放,不能只有放没有缩吧?注册表注销法反正是可以的
这是75%的效果


回复

使用道具 举报

227#
发表于 2022-5-27 08:19:50 | 只看该作者
527104427 发表于 2022-5-26 21:34
试了一下,居然是按当前分辨率算的,改了分辨率,最大DPI也跟着改!
你说的问题好解决,大于500%的一律 ...

211楼的链接没仔细看啊,注意表4和表5间的说明。
加大缩放因子,相当于降低分辨率,如果低于800*600,那实用性就太差了。

点评

不是没仔细看,而是没整明白。原来暗含着计算公式: 最大dpi=垂分辨率/720  详情 回复 发表于 2022-5-27 09:54
回复

使用道具 举报

228#
发表于 2022-5-27 08:28:10 | 只看该作者
参考一下:

回复

使用道具 举报

229#
发表于 2022-5-27 09:15:10 | 只看该作者
比较关心缩小能不能用函数来整。缩小屏幕上能够显示更多东西,只要显示器够大够清晰,眼力足够好,也是有用的

点评

试了一下,函数实现不了。应该跟系统设置保持一致才是正确的吧,系统都不承认75%、50%,我还不不提倡加这两个。 [attachimg]502044[/attachimg] [attachimg]502045[/attachimg] [attachimg]502046[/attachi  详情 回复 发表于 2022-5-27 10:09
回复

使用道具 举报

230#
发表于 2022-5-27 09:17:17 | 只看该作者
还是再增加两个比例,50%,75%反正用注册表法可以实现

点评

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

使用道具 举报

231#
发表于 2022-5-27 10:45:31 | 只看该作者
527104427 发表于 2022-5-27 09:54
不是没仔细看,而是没整明白。原来暗含着计算公式:
最大dpi=垂分辨率/720

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

使用道具 举报

232#
发表于 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 了


估计: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
回复

使用道具 举报

233#
发表于 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,不知道有不有强制的方法。


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



点评

按照大佬们指点的最大dpi计算公式,在注销前先来个友好提醒,默认选否,免得没保存手头的工作就被干掉了。 还处理了一下你说的api返回错误的问题。 应该可以收工了  详情 回复 发表于 2022-5-27 19:51
回复

使用道具 举报

234#
发表于 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用户下,直接改注册表注销,否则什么也不干;
回复

使用道具 举报

235#
发表于 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, 下载次数: 5)
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%
复制代码
上面代码运行两次,第二次数据正常




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

点评

我记得win7是负数。 那这就没办法了。  详情 回复 发表于 2022-5-28 00:21
回复

使用道具 举报

236#
发表于 2022-5-28 09:07:11 | 只看该作者
527104427 发表于 2022-5-28 00:21
我记得win7是负数。
那这就没办法了。

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


回复

使用道具 举报

237#
发表于 2022-5-28 10:01:27 | 只看该作者
本帖最后由 hhh333 于 2022-5-28 17:15 编辑
527104427 发表于 2022-5-28 00:21
我记得win7是负数。
那这就没办法了。

把逻辑重新整理一下: setdpi.7z (4.53 KB, 下载次数: 23)
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
复制代码



回复

使用道具 举报

238#
发表于 2022-5-28 14:56:19 | 只看该作者
楼主厉害了
回复

使用道具 举报

239#
发表于 2022-5-28 19:17:56 | 只看该作者
527104427 发表于 2022-5-28 00:21
我记得win7是负数。
那这就没办法了。

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

点评

昨天红毛悄悄告诉我,win10.0.14393 以上系统才支持SystemParametersInfoW函数,好吧,再接着改! 把推荐dpi也弄成公式化了,不再写死。 还有很多细节上的考量,比如win10正常系统,先改成超过最大dpi的百分比(  详情 回复 发表于 2022-5-28 20:25
因为微软都是以高为准的,还是跟着微软走吧  详情 回复 发表于 2022-5-28 20:11
回复

使用道具 举报

240#
发表于 2022-5-28 21:31:19 | 只看该作者
527104427 发表于 2022-5-28 20:25
昨天红毛悄悄告诉我,win10.0.14393 以上系统才支持SystemParametersInfoW函数,好吧,再接着改!
把推 ...

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

点评

我这是如此。测试环境单调,没啥权威性  详情 回复 发表于 2022-5-29 00:11
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 16:52

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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