无忧启动论坛

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

[原创] [更新(2025/12/12) ModernUI回归] explorer再见,WinXShell你好!

    [复制链接]
1231#
发表于 2025-11-25 09:57:01 | 只看该作者
回复

使用道具 举报

1232#
发表于 2025-11-25 11:12:08 | 只看该作者
本帖最后由 zhuxiangchi 于 2025-11-25 21:51 编辑
slore 发表于 2025-11-25 09:40
用wimbuilder2制作PE可以用原生的explorer也可以用winxshell,25H2需要点关于更新一下,然后,手动替换ve ...

还是不行啊。按照你的来还是进不去啊。25H2需要点关于更新一下是指WimBuilder-.v2024-11-11.cmd更新一下这个软件吗?GitHub上下载不了,我设置Gitee下载完更新完专家模式还是不行啊。也手动替换了为StartAllBack_3.9.18_setup.exe版本了,进不到界面蓝屏了,什么回事了?

点评

WimBuilder2_update_and_SAB_3.9_25h2_build.gif (15MB) https://slore.lanzouo.com/b00z5zy6b  详情 回复 发表于 2025-11-25 13:57
方便你录个屏。准备界面是选 boot.wim[2]么?  详情 回复 发表于 2025-11-25 13:32
回复

使用道具 举报

1233#
 楼主| 发表于 2025-11-25 13:32:36 | 只看该作者
zhuxiangchi 发表于 2025-11-25 11:12
还是不行啊。按照你的来还是进不去啊。25H2需要点关于更新一下是指WimBuilder-.v2024-11-11.cmd更新一下 ...

方便你录个屏。准备界面是选 boot.wim[2]么?
回复

使用道具 举报

1234#
 楼主| 发表于 2025-11-25 13:57:26 | 只看该作者
本帖最后由 slore 于 2025-11-25 13:58 编辑
zhuxiangchi 发表于 2025-11-25 11:12
还是不行啊。按照你的来还是进不去啊。25H2需要点关于更新一下是指WimBuilder-.v2024-11-11.cmd更新一下 ...


更新后制作 25H2 (10.0.26100.7171) 启动正常。请确认制作时,操作步骤是否不同。

WimBuilder2_update_and_SAB_3.9_25h2_build.gif  (15MB)

https://slore.lanzouo.com/b00z5zy6b
回复

使用道具 举报

1235#
发表于 2025-11-26 14:38:17 | 只看该作者
slore 发表于 2025-11-25 09:38
和wimbuilder2无关。我只是用它来直接把boot.wim打包iso,里面的boot.wim就是直接25h2自带的。

我有点好奇的是,你XXX\WimBuilder2-Full.v2024-11-11_Beta.1\_ISO_文件夹里面的那个WinXShell是需要自己手动复制过去的吗?还有Explorer++之类的软件,跟你直接使用WimBuilder2一样的吗?但是需要提前放到_ISO文件夹里面去,因为你是手动操作,不是用软件自动操作,需要提前放进去才可以在后面调用WnXShell命令时候可以使用文件资源管理器的界面吗?@slore,希望你能解答一下。感觉你这个命令窗口挺好用的,有空我也可以学习一下,我也是软件工程师,希望可以查看你开源代码完全弄懂了。

点评

这个_ISO_目录会用微软的命令打包成ISO文件,你用UlturaISO拖进去一样的。 因为是测试原版boot.wim,没用W2的构建,就是最后的打包iso,还有调用vbox启动iso加载测试。 如果用W2制作PE的话,winxshell,explor  详情 回复 发表于 2025-11-26 14:57
回复

使用道具 举报

1236#
 楼主| 发表于 2025-11-26 14:57:16 | 只看该作者
zhuxiangchi 发表于 2025-11-26 14:38
我有点好奇的是,你XXX\WimBuilder2-Full.v2024-11-11_Beta.1\_ISO_文件夹里面的那个WinXShell是需要自己 ...

这个_ISO_目录会用微软的命令打包成ISO文件,你用UlturaISO拖进去一样的。
因为是测试原版boot.wim,没用W2的构建,就是最后的打包iso,还有调用vbox启动iso加载测试。


如果用W2制作PE的话,winxshell,explorer++,都是自动复制的。放到Program Files下面,是生成到boot.wim里面。
回复

使用道具 举报

1237#
 楼主| 发表于 2025-11-26 14:58:24 | 只看该作者
更新后制作 25H2 (10.0.26100.7171) 启动正常。请确认制作时,操作步骤是否不同。

WimBuilder2_update_and_SAB_3.9_25h2_build.gif  (15MB)

https://slore.lanzouo.com/b00z5zy6b


这个演示就没手动复制操作。
回复

使用道具 举报

1238#
发表于 2025-11-26 20:50:24 | 只看该作者
slore 发表于 2025-11-26 14:58
更新后制作 25H2 (10.0.26100.7171) 启动正常。请确认制作时,操作步骤是否不同。

WimBuilder2_update_a ...

哦,明白了,跟着操作了一次,可能你还是没有明白我的意思,我看了,你那个WinXShell是5.15版本的,新增了一个UI界面,如果不添加dll依赖文件,这个文件资源管理器还是打不开的,你把一个Explorer++.exe文件拖进去,就像你之前说的这个不用添加依赖文件了,就是用这个替代了WinShell的文件资源管理器,这个没有依赖的dll文件怎么点都没有反应了。你只是不过用Explorer++.exe替代了罢了,对吧?其实就像你说要想启动要么添加依赖桌面dll文件到系统文件夹里面要么用第三方没有依赖的Explorer++.exe即可了,我说的对吧?没有那个UI_Settings.exe,那个WinSehll打开文件夹之后点击WinXShell_x64.exe都没有用了。

点评

BOOT.WIM默认启动,有个wallpaperhost.exe显示蓝色背景,然后启动setup.exe安装程序。 这个 wallpaperhost.exe 代表“外壳”,存在外壳程序时,WinXShell_x64.exe 直接双击默认是 文件管理器,所以你补文件,这  详情 回复 发表于 2025-11-27 00:10
回复

使用道具 举报

1239#
 楼主| 发表于 2025-11-27 00:10:21 | 只看该作者
zhuxiangchi 发表于 2025-11-26 20:50
哦,明白了,跟着操作了一次,可能你还是没有明白我的意思,我看了,你那个WinXShell是5.15版本的,新增 ...

BOOT.WIM默认启动,有个wallpaperhost.exe显示蓝色背景,然后启动setup.exe安装程序。

这个 wallpaperhost.exe 代表“外壳”,存在外壳程序时,WinXShell_x64.exe 直接双击默认是
文件管理器,所以你补文件,这个打不开,没反应。

你任务栏结束 wallpaperhost.exe主程序,再双击 WinXShell_x64.exe 就会作为外壳启动,
显示桌面和任务栏。

我GIF动画演示的时候,命令行输入的是: WinXShell_x64.exe -shell 。
通过 -shell 参数表明 结束现有“外壳”程序,把 WinXShell 作为外壳启动,所以可以正常运行。

演示动画,我用的最新版本 5.1.5,使用UI_xxxx开头的程序名,将调用 UI_xxxx的UI组件,
等于 WinXShell_x64.exe -jcfg wxsUI\UI_Settings.zip, 这里就是打开一个UI程序,
设置分辨率,查看系统版本等,这个旧版本也一样。

WinXShell => 作为外壳程序:桌面,任务栏,托盘区域 <=  无系统dll额外依赖。
WinXShell => 作为文件管理器:此电脑,文件夹,文件操作 <= 需要文件打开对话框依赖dll。

双击行为:没有外壳程序,作为外壳启动。有外壳程序存在,作为文件管理器打开此电脑。
回复

使用道具 举报

1240#
发表于 2025-11-27 09:08:00 | 只看该作者
本帖最后由 zhuxiangchi 于 2025-11-27 20:51 编辑
slore 发表于 2025-11-27 00:10
BOOT.WIM默认启动,有个wallpaperhost.exe显示蓝色背景,然后启动setup.exe安装程序。

这个 wallpaper ...

我大概明白你的意思了,我之前意思不能启动是说进入PE系统中,点击左小角的winXshell作为文件资源管理器,没有反应,跟你上面说的最后倒数第二句话一样的意思,只不过你还解释了没有进入PE之前的WinXShell是作为外壳程序,是这个意思吧?这个可以启动啊,以前我不明白WinXShell的作用,看来有两层,一个是进入PE之前作为外壳,另外一个是你说的,PE系统中的我的电脑和左下角文件资源管理,这个没有文件打开对话框依赖dll的确不行啊,其他都正常,还有就是点击回收站这个也是没有反应的,这个是不是也是WinShell的一个需要文件打开对话框依赖dll的功能了?我的理解没有错吧?

点评

是个意思。不过作为外壳不是只有启动前,启动后也行,但是不能存在其他外壳,比如wallpaperhost.exe或者explorer.exe,存在了,它双击就是文件资源管理器,不是外壳了。 回收站本质也是“文件夹”,不过固定是各  详情 回复 发表于 2025-11-28 20:22
回复

使用道具 举报

1241#
发表于 2025-11-27 11:00:37 | 只看该作者
谢谢分享
回复

使用道具 举报

1242#
发表于 2025-11-28 19:41:07 来自手机 | 只看该作者
持续关注
回复

使用道具 举报

1243#
 楼主| 发表于 2025-11-28 20:22:08 | 只看该作者
zhuxiangchi 发表于 2025-11-27 09:08
我大概明白你的意思了,我之前意思不能启动是说进入PE系统中,点击左小角的winXshell作为文件资源管理器 ...


是这个意思。
不过作为外壳不是只有启动前,启动后也行,但是不能存在其他外壳,比如wallpaperhost.exe或者explorer.exe,
存在了,它双击就是文件资源管理器,不是外壳了。

回收站本质也是“文件夹”,不过固定是各分区的特殊路径,所以也依赖 文件打开对话框,能显示文件夹,才能打开回收站。
回复

使用道具 举报

1244#
发表于 2025-12-6 20:05:31 | 只看该作者
fileexplorer.cpp
static int CustomFileDialog(IFileOpenDialog *pfd)
//避免“宽下巴”,注释掉 SetWindowPos(hwndDialog, HWND_NOTOPMOST, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_DRAWFRAME);

winxshell.PNG (44.73 KB, 下载次数: 5)

winxshell.PNG

点评

这个是最大化以后关闭,再打开非最大化表示,导致有宽下巴了。我看看上面的修改方法。  详情 回复 发表于 2025-12-6 20:22

评分

参与人数 1无忧币 +5 收起 理由
slore + 5 很给力! 确实修复了。

查看全部评分

回复

使用道具 举报

1245#
发表于 2025-12-6 20:12:40 | 只看该作者
版本5.15, 语句不正常EXEC "%ProgramFiles%\WinXShell\WinXShell.exe" -code "Startmenu:Pin([[regedit.exe]])"
StartAllback显示名字,但无图标打不开

点评

搞错了,调用SearchPath前,展开环境变量,判断文件是否存在导致的。 把这行删除就好了。 TCHAR *CompletePath(TCHAR *target, TCHAR *out) { TCHAR buff[MAX_PATH = { 0 }; ExpandEnvironmentString  详情 回复 发表于 2025-12-7 20:43
22631 以后就任务栏不能固定了,系统自带的右键菜单也不能用了。 shell32.dll中的关于固定的代码被改位置了,好像是 winrt 的接口了。 我目前再解析Taskband,感觉可以模拟更新一下这个注册表,把里面快捷方式路径  详情 回复 发表于 2025-12-6 20:21
回复

使用道具 举报

1246#
 楼主| 发表于 2025-12-6 20:21:23 | 只看该作者
yamingw 发表于 2025-12-6 20:12
版本5.15, 语句不正常EXEC "%ProgramFiles%\WinXShell\WinXShell.exe" -code "Startmenu:Pin([[regedit.ex ...

22631 以后就任务栏不能固定了,系统自带的右键菜单也不能用了。
shell32.dll中的关于固定的代码被改位置了,好像是 winrt 的接口了。
我目前再解析Taskband,感觉可以模拟更新一下这个注册表,把里面快捷方式路径,文件名修改后,
相当于自己做一个快捷方式,把二进制更新。

开始菜单的话,代码没改,不知道是不是StartAllBack版本更新导致的?
我再确认一下。

点评

26220.7344测试,版本20.24.8.8正常,20.25.11.11不正常。是开始菜单,任务栏早就不行了,是微软自己有问题,正常系统固定到任务栏也有问题。  详情 回复 发表于 2025-12-6 20:32
回复

使用道具 举报

1247#
 楼主| 发表于 2025-12-6 20:22:25 | 只看该作者
yamingw 发表于 2025-12-6 20:05
fileexplorer.cpp
static int CustomFileDialog(IFileOpenDialog *pfd)
//避免“宽下巴”,注释掉 SetWin ...

这个是最大化以后关闭,再打开非最大化表示,导致有宽下巴了。我看看上面的修改方法。
回复

使用道具 举报

1248#
发表于 2025-12-6 20:32:25 | 只看该作者
slore 发表于 2025-12-6 20:21
22631 以后就任务栏不能固定了,系统自带的右键菜单也不能用了。
shell32.dll中的关于固定的代码被改位 ...

26220.7344测试,版本20.24.8.8正常,20.25.11.11不正常。是开始菜单,任务栏早就不行了,是微软自己有问题,正常系统固定到任务栏也有问题。

点评

Startmenu:Pin()本身没有问题。新版本调用命令或者脚本时,不再强制转到WinXShell所在目录,而是保持工作目录导致的。 调用固定命令前,对缺省路径的参数"regedit.exe",使用 ComplatePath() 函数获取完整路径,  详情 回复 发表于 2025-12-7 20:19
回复

使用道具 举报

1249#
 楼主| 发表于 2025-12-7 20:19:20 | 只看该作者
本帖最后由 slore 于 2025-12-8 10:45 编辑
yamingw 发表于 2025-12-6 20:32
26220.7344测试,版本20.24.8.8正常,20.25.11.11不正常。是开始菜单,任务栏早就不行了,是微软自己有问 ...

Startmenu:Pin()本身没有问题。新版本调用命令或者脚本时,不再强制转到WinXShell所在目录,而是保持工作目录导致的。

调用固定命令前,对缺省路径的参数"regedit.exe",使用 SearchPath() 函数获取完整路径,
然后调用文件的上下文菜单进行固定。

如果执行命令的工作路径是, X:\Windows> , 那么获取到的文件路径是相对路径的 regedit.exe,
并没有补充完整的路径,导致固定快捷方式的信息不正确。

旧版本强制在WinXShell.exe文件所在目录,所以ComplatePath返回了完整路径 X:\Windows\regedit.exe,
那么固定的快捷方式就正确了。

对应方法1:
固定时,使用全路径执行命令。
winxshell.exe -cd -code Startmenu:Pin([[%windir%\regedit.exe]])

对应方法2:
切换到固定文件不在的位置执行命令。

对应方法3:
winxshell.exe -code命令执行时,添加 -cd 参数,转到winxshell所在目录。
winxshell.exe -cd -code Startmenu:Pin([[regedit.exe]])

我修改下代码,SearchPath() 获得的路径如果不是完整路径,那么再用API获取下文件的全路径,
再进行固定。

2025.12.12的 5.1.5.1 版本将修复这个问题。
回复

使用道具 举报

1250#
 楼主| 发表于 2025-12-7 20:43:25 | 只看该作者
本帖最后由 slore 于 2025-12-7 20:48 编辑
yamingw 发表于 2025-12-6 20:12
版本5.15, 语句不正常EXEC "%ProgramFiles%\WinXShell\WinXShell.exe" -code "Startmenu:Pin([[regedit.ex ...

搞错了,调用SearchPath前,展开环境变量,判断文件是否存在导致的。
把这行删除就好了。



TCHAR *CompletePath(TCHAR *target, TCHAR *out)
{
    TCHAR buff[MAX_PATH] = { 0 };
    ExpandEnvironmentStrings(target, out, MAX_PATH);
    if (PathFileExists(out)) return out; // ★ 这里直接返回cmd.exe或者regedit.exe了。
    StrCpy(buff, out);
    if (SearchPath(NULL, buff, NULL, MAX_PATH, out, NULL)) {
        return out;
     }
     return NULL;
}


点评

非常感谢  详情 回复 发表于 2025-12-8 09:40
回复

使用道具 举报

1251#
发表于 2025-12-8 09:40:37 | 只看该作者
slore 发表于 2025-12-7 20:43
搞错了,调用SearchPath前,展开环境变量,判断文件是否存在导致的。
把这行删除就好了。

非常感谢
回复

使用道具 举报

1252#
发表于 7 天前 | 只看该作者
不懂就问,老大别笑我。
Classic Shell+ WinXshell 作为外壳制作的PE,想把任务栏上的时间修改为精确到秒,单修改注册表好像不起什么作用了。查找了WinXshell 中的代码,找到了 WinXShell.lua 中有这一段代码,尝试把  '%H:%M'改为 '%H:%M:%S' ,不成功。是不是还要在Pecmd.lua 或 Pecmd.ini 中调用这个代码还是要修改其它地方?

-- 自定义时钟区域的显示信息
-- 自定义显示示例:
--[[
    |  22:00 星期六  |
    |   2019-9-14    |

-- FYI:https://www.lua.org/pil/22.1.html
function TrayClockTextFormatter_zhCN()
  local wd_name = {'日', '一', '二', '三', '四', '五', '六'}
  local now_time = os.time()
  local wd_disname =  ' 星期' .. wd_name[os.date('%w', now_time) + 1]
  local clocktext = os.date('%H:%M' .. TEXT(wd_disname) .. '\r\n%Y-%m-%d', now_time)
  App:SetVar('ClockText', clocktext)
end


-- custom tray clock display text
-- sample for:
--[[
    |  22:00 Sat  |
    |  2019-9-14  |

-- FYI:https://www.lua.org/pil/22.1.html
function TrayClockTextFormatter_enUS()
  local now_time = os.time()
  local clocktext = os.date('%H:%M %a\r\n%Y-%m-%d', now_time)
  App:SetVar('ClockText', clocktext)
end

另:桌面右键菜单中的自动排列图标,注册表改了,也不起作用。不知要在哪修改?

点评

[attachimg]568945[/attachimg]  详情 回复 发表于 5 天前
-- 中文(Chinese): 设置 任务栏 时钟显示信息 -- English: Set the display text of the taskbar clock -- WxsHandler.TrayClockTextFormatter = nil if os.info('locale') == 'zh-CN' then W  详情 回复 发表于 5 天前
回复

使用道具 举报

1253#
发表于 7 天前 | 只看该作者

谢谢分享
回复

使用道具 举报

1254#
发表于 5 天前 | 只看该作者
等待S大12.12日更新5.1.5.1 版本。
回复

使用道具 举报

1255#
发表于 5 天前 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

1256#
 楼主| 发表于 5 天前 | 只看该作者
xmzhqw 发表于 2025-12-9 18:03
不懂就问,老大别笑我。
Classic Shell+ WinXshell 作为外壳制作的PE,想把任务栏上的时间修改为精确到秒 ...


  -- 中文(Chinese): 设置 任务栏 时钟显示信息
  -- English: Set the display text of the taskbar clock
  -- WxsHandler.TrayClockTextFormatter = nil


  if os.info('locale') == 'zh-CN' then
    WxsHandler.TrayClockTextFormatter = TrayClockTextFormatter_zhCN  ★这行前面的注释符号删除,才生效。加%S是显示秒。
  elseif os.info('locale') == 'en-US' then
    -- WxsHandler.TrayClockTextFormatter = TrayClockTextFormatter_enUS
  end
end
回复

使用道具 举报

1257#
 楼主| 发表于 5 天前 | 只看该作者
xmzhqw 发表于 2025-12-9 18:03
不懂就问,老大别笑我。
Classic Shell+ WinXshell 作为外壳制作的PE,想把任务栏上的时间修改为精确到秒 ...


点评

太感谢了!都怪我没好好学习。成功了。 [attachimg]568971[/attachimg]  详情 回复 发表于 4 天前
回复

使用道具 举报

1258#
发表于 4 天前 | 只看该作者

太感谢了!都怪我没好好学习。成功了。

回复

使用道具 举报

1259#
发表于 4 天前 | 只看该作者
感谢楼主分享            
回复

使用道具 举报

1260#
发表于 4 天前 | 只看该作者
S大:2025.12.12的 5.1.5.1 版本将修复这个问题。今天2025.12.12了,怎么没见你更新。

点评

除了上面的提出的问题,还有其他网友反馈的改进建议和问题: * UI_Settings 添加 多显示器投影按钮(Windows + P) * 注册 Windows + P 热键 * UI_Settings 没有圆角的环境,添加边框 (已解决。win10系统下,  详情 回复 发表于 4 天前
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-12-16 11:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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