lhc0688 发表于 2022-4-1 01:09:58

PE自适应高分屏显示DPI缩放相关三个小工具

本帖最后由 lhc0688 于 2022-4-2 10:13 编辑

PE启动后自适应高分屏显示缩放方面问题,好像一直没有看到好的解决办法,网上找了三个DPI方面的小工具,发上来供参考,看能否有好的解决思路:

1、DPI缩放检测工具(含源码),实测可以准确检测出原始DPI及缩放比例:


2、设置系统DPI,实测有效:


3、根据屏幕显示分辨率自动设置DPI缩放,实测有效:



------------------------------------------------------
以上三个DPI方面的 小工具,说明检测、设置应该都能实现,这样的话,是否可以不依赖外部工具,仅用代码来完成分辨率数据检测、并自动设置显示缩放呢?希望坛里的高手能不吝赐教下。

相应的几个常见分辨率值跟建议缩放倍数:

>=3840200%
>=2560175%
>=1920150%
>=1600 125%
1600 以下默认100%
-------------------------------------------------------
另外:如果PE中保留Windows原始屏幕设置功能,是否可行?

以上想法,供参考讨论。






泮安宁 发表于 2022-4-1 01:53:50

我前几天刚分享了这个软件,不过有人反映必须进入桌面后才有效果

cclgoo 发表于 2022-4-1 02:19:57

原来要两次重启刷新,难怪我一直弄不了,即使重刷也不行,后面我用了延迟!~

lhc0688 发表于 2022-4-1 09:14:18

泮安宁 发表于 2022-4-1 01:53
我前几天刚分享了这个软件,不过有人反映必须进入桌面后才有效果

确实,我也折腾的点时间才搞明白,运行这个之前必须先重启一次explorer,不然检测不到桌面参数;运行设置后,如果改变默认比例,还需要再次刷新下explorer,不然图标缩放会不正确(主要是windows自己的图标,程序的图标好像能同步调整)。

jjbj66 发表于 2022-4-1 10:50:26

KKKK

szwp 发表于 2022-4-1 11:34:41

太麻烦了,PECMD一句命令就可放大。

lhc0688 发表于 2022-4-1 12:24:23

szwp 发表于 2022-4-1 11:34
太麻烦了,PECMD一句命令就可放大。

实际应用中 TEAM DISP 命令经常会无效,帖子上有说到这个(第二种情况),这方面我也不太理解什么原因。

szwp 发表于 2022-4-1 12:57:41

lhc0688 发表于 2022-4-1 12:24
实际应用中 TEAM DISP 命令经常会无效,帖子上有说到这个(第二种情况),这方面我也不太理解什么原因。

CALL $--qd# user32.dll,SystemParametersInfoW,159,1,0,1

楼主项目换得快的,当前系统安装pe还在搞么。

lhc0688 发表于 2022-4-1 13:16:38

szwp 发表于 2022-4-1 12:57
CALL $--qd# user32.dll,SystemParametersInfoW,159,1,0,1

楼主项目换得快的,当前系统安装pe还在搞么 ...

实测确实可以!兄弟才是实力技术派,没法比!

不过又出了个新问题:


szwp 发表于 2022-4-1 13:17:26

lhc0688 发表于 2022-4-1 13:16
实测确实可以!兄弟才是实力技术派,没法比!

不过又出了个新问题:

实际俺没用过TEAM,换成这个试吧,别放弃BCD引导的批处理啊。

lhc0688 发表于 2022-4-1 13:25:25

szwp 发表于 2022-4-1 13:17
实际俺没用过TEAM,换成这个试吧,别放弃BCD引导的批处理啊。

刚又测试了下:大于175%就会出现黑块,150%以下没问题,感觉会不会是PE用的explorer.exe原因?

szwp 发表于 2022-4-1 13:27:06

lhc0688 发表于 2022-4-1 13:25
刚又测试了下:大于175%就会出现黑块,150%以下没问题,感觉会不会是PE用的explorer.exe原因?

又准备放弃,改回手动操作了么?

wuming520 发表于 2022-4-1 13:37:51

楼主欢迎进群10PE讨论群1067888280里面有你想要的解决方案以及答案

slore 发表于 2022-4-1 15:27:10

lhc0688 发表于 2022-4-1 13:16
实测确实可以!兄弟才是实力技术派,没法比!

不过又出了个新问题:

有WinXShell,直接打开WinXShell.lua,里面有根据分辨率调整DPI的函数,默认无效,把函数名改下就好了。

lhc0688 发表于 2022-4-1 17:27:58

slore 发表于 2022-4-1 15:27
有WinXShell,直接打开WinXShell.lua,里面有根据分辨率调整DPI的函数,默认无效,把函数名改下就好了。

都是名副其实的大佬级高手,有这么多好方法,不指点还真不知道,太感谢了!

既然有可以自动识别的功能,为什么不默认开启呢?

还有,函数开启后,pe里要怎么调用函数呢?还望能再多指点下。

lhc0688 发表于 2022-4-1 19:36:40

slore 发表于 2022-4-1 15:27
有WinXShell,直接打开WinXShell.lua,里面有根据分辨率调整DPI的函数,默认无效,把函数名改下就好了。

修改后,在PECMD或PETools里:

EXEC %ProgramFiles%\WinXShell\WinXShell.exe -ondisplaychanged

这样调用,PE启动后:



开始菜单功能错位,重启、关机按键失效。
不知道是调用方式不对,还是其它哪里操作有误。

slore 发表于 2022-4-1 20:11:28

lhc0688 发表于 2022-4-1 19:36
修改后,在PECMD或PETools里:

EXEC %ProgramFiles%\WinXShell\WinXShell.exe -ondisplaychanged


你这样启动了WinXShell外壳。。。


我如果是Explorer外壳,应该是启动-daemon可以达到这个效果。
我回去了试试。

没有默认开启,是因为显示屏不同,PE的话,默认安全分辨率1024x768为好。

lhc0688 发表于 2022-4-1 20:28:31

PECMD.ini中代码:
--------------------------------------------
HOTK F9,kill explorer.exe
//CALL $--qd# user32.dll,SystemParametersInfoW,159,1,0,1
//EXEC %ProgramFiles%\WinXShell\WinXShell.exe -ondisplaychanged
EXEC "%ProgramFiles%\WinXShell\WinXShell.exe" -daemon
LOAD %ProgramFiles%\PETools.ini
kill explorer.exe
---------------------------------------------------------------
WinXShell.lua中修改后:
-- 如果你想使用这个自定义事件函数,
-- 请将这个函数名变更为ondisplaychanged()。
function ondisplaychanged()
local cur_res_x = Screen:GetX()
if last_res_x == cur_res_x then return end
last_res_x = cur_res_x
if last_res_x >= 3840 then
    Screen:DPI(150)
elseif last_res_x >= 1440 then
    Screen:DPI(125)
elseif last_res_x >= 800 then
    Screen:DPI(100)
end
end
-------------------------------------
测试没有缩放动作,还是100%,我屏幕1920(>=1440)

lhc0688 发表于 2022-4-1 20:33:59

函数修改成直接执行,也没反应,是不是函数没调用?
function ondisplaychanged()
local cur_res_x = Screen:GetX()
if last_res_x == cur_res_x then return end
last_res_x = cur_res_x
if last_res_x >= 3840 then
    Screen:DPI(150)
elseif last_res_x >= 1440 then
    Screen:DPI(125)
elseif last_res_x >= 800 then
    Screen:DPI(100)
end
Screen:DPI(150)
end

lhc0688 发表于 2022-4-1 20:50:15

本帖最后由 lhc0688 于 2022-4-1 21:01 编辑

还发现一个问题:右键【屏幕设置】(调用的是 WinXShell.exe ms-settings:display),现象:

如果初始屏幕默认是100%,如果【屏幕设置】调整为125%,则会设为150%,再重复缩小为125%才会有效;

--------------
试了下,这个现象是由WinXShell.lua里面ondisplaychanged()函数引起的,恢复回去就正常了,说明函数确实已被调用过,PECMD.ini里面有
EXEC "%ProgramFiles%\WinXShell\WinXShell.exe" -ui -jcfg wxsUI\UI_WIFI\main.jcfg -hidewindow
EXEC "%ProgramFiles%\WinXShell\WinXShell.exe" -daemon
-------------------

smmxlsq 发表于 2022-4-1 22:06:48

用noMeiryoUI调整字体大小,方便!!!

szwp 发表于 2022-4-2 08:13:05

在TEAM DISP 命令经常会无效的情况下试。

szwp 发表于 2022-4-2 08:15:03

本帖最后由 szwp 于 2022-4-2 08:17 编辑

lhc0688 发表于 2022-4-1 17:27
都是名副其实的大佬级高手,有这么多好方法,不指点还真不知道,太感谢了!

既然有可以自动识别的功能 ...
方法太多了,别放弃搞BCD WIMPE。BCDEDIT和BCDBOOT都能自动识别引导区。

lhc0688 发表于 2022-4-2 10:11:28

发现通过 WinXShell.exe ms-settings:display 调用方式修改PE显示缩放比例,会出现一个问题:

修改后,如果多次刷新explorer,桌面图标会显示不正常,间距会变很大,图标大小也会出现异常;

szwp 发表于 2022-4-2 10:34:39

放大因素不是由分辨率唯一决定的,显示器大小,视力,离显示器(电视机 投影仪)的距离都有关系。俺老花,需要比常人放大一级或二级,所以搞了个快捷方式在桌面。

szwp 发表于 2022-4-2 10:50:56

不考虑显示器大小就是瞎扯了。pecmd实现比批处理方便,不需要第三方工具。

2011wyy 发表于 2022-4-2 11:18:21

zlzx01 发表于 2022-4-2 11:55:25

感谢分享!!!

szwp 发表于 2022-4-2 14:49:41

szwp 发表于 2022-4-2 10:50
不考虑显示器大小就是瞎扯了。pecmd实现比批处理方便,不需要第三方工具。

CALL用的就是PECMD啊。批处理做不了。

928274096 发表于 2022-4-2 18:19:54

slore 发表于 2022-4-1 15:27
有WinXShell,直接打开WinXShell.lua,里面有根据分辨率调整DPI的函数,默认无效,把函数名改下就好了。

WinXShell比这几个好用多了
页: [1] 2
查看完整版本: PE自适应高分屏显示DPI缩放相关三个小工具