![]() |
lwb1 发表于 2019-2-3 11:06 因为使用lua脚本扩展,做了一个 自动加载 lua_helper的lua脚本,结果呢, 它调用dir /b命令获取所有lua文件列表会启动一个cmd来运行的,所以会闪一下。 与文件夹关联没有关系。 打开:WinXShell\lua_helper\lua_helper.lua,删除红色的部分,添加蓝色的部分。 package.cpath = dllpath .. package.cpath |
本帖最后由 slore 于 2019-2-3 13:43 编辑 lwb1 发表于 2019-2-3 10:07 补充系统缺失的文件,可以使用内置的“打开文件对话框”模拟资源管理器,这种方式和explorer.exe几乎一模一样,而且PE系统的很多“浏览”按钮也可以使用了,方便打开文件。 如果是这种方式,你不用修改注册表,桌面打开文件夹,我的电脑,回收站,按Win+E打开资源管理器等都自动会由WinXShell.exe来打开。 运行直接输入: system32这种方式打开文件夹,确实漏了关联注册表,你可以修改HKCR\Folder的关联到WinXShell.exe %1程序。 如果你使用第三方文件管理器,比如explorer++.exe,他们支持多窗口等其他特性,而且是绿色软件,单独一个exe就可以了,不依赖系统组件,比较便携。 这个情况,你修改好WinXShell.jcfg的配置,桌面打开文件夹,我的电脑,回收站,按Win+E打开资源管理器等都自动会由WinXShell去调用第三方文件管理器,你不需要修改注册表。 当然,同样运行直接输入:system32会提示无法找到关联程序,你可以修改注册表关联到WinXShell.exe %1,也可以直接关联到该第3方文件管理器:explorer++.exe %1。 |
lwb1 发表于 2019-2-2 16:24 如果你用第三方文件管理器,如 explorer++.exe。 你放到和WinXShell.exe相同目录, WinXShell.jcfg你打开 "::文件管理器": { "#::第3方文件管理器":"##{JVAR_MODULEPATH}\\explorer++.exe", "#padding-bottom":20 }, "#::第3方文件管理器"开头的 #号删除掉就行了。 你也可以随意放到其他地方,这个路径修改就行了,比如: "::第3方文件管理器":"X:\\Program Files\\explorer++\\explorer++.exe", |
参与人数 1 | 无忧币 +1 | 收起 理由 |
---|---|---|
| + 1 | 赞一个! |
Mouri_Naruto 发表于 2018-8-20 00:36 推送到PExplorer这里了, 里面有2个分支PExlorer_v1.0,引入UI库前的最后一个Tag版本, 另外WinXShell改名后对文件管理器也有部分修正,所以把这部分修正单独抽取出来, 推送到WinXShell_shellpart的分支了,可以无依赖VS2015编译成功。 WinXShell的仓库预留着吧。 |
参与人数 2 | 无忧币 +6 | 收起 理由 |
---|---|---|
| + 1 | 很给力! |
| + 5 | 很给力! |
本帖最后由 xintiandi 于 2018-1-29 22:33 编辑 的确是忘了加winpe参数,加上后,重启和关机都有效了。我想取消关机按钮,只保留重启,都是远程操作,一旦关机后,就不方便开机了,不知如何实现。 WinXShell.exe -ui -jcfg UI_Shutdown\main.jcfg 这个直接命令行可用,改到配置里面会出错。 |
楼主,还是静态编译,去除掉对VC库依赖吧 |
谢谢科普分享! |
谢谢分享 |
谢谢楼主的分享 |
感谢楼主的分享,确实有用 |
slore 发表于 2025-5-11 13:35 while (quot >= 1024)建议改成while (quot > 999),循环里仍然除以1024不变。 之前举例的Intel集显显存,取一半是1073739904,用这段代码算出来是: 1024.00MB 1023.9981689453 MB 没能凑整到1GB上。 改后则是: 1.00GB 0.99999821186066 GB |
hua_wuxin 发表于 2025-5-11 08:17 显存大小有不是整数GB的情况,比如GTX 480是1.5G显存。 那就保留1位小数,然后替换.0空格 为 空格。 |
用心了 |
补一个大小转单位的辅助函数。 下午更新一下。 Format = {} Fmt = Format function Format.SizeUnit(size, fmt) local units = {"Bytes", "KB", "MB", "GB", "TB"} local n = 1 local quot = size while (quot >= 1024) do n = n + 1 quot = quot / 1024 if n == #units then break end end return string.format(fmt, quot) .. units[n], quot, units[n] end -- test print(Format.SizeUnit(0, "%.0f ")) -- 0 Bytes print(Format.SizeUnit(123, "%.0f ")) -- 123 Bytes print(Format.SizeUnit(1024, "%.0f ")) -- 1 KB print(Format.SizeUnit(20250505, "%.0f ")) -- 19 MB print(Format.SizeUnit(20250505, "%.2f ")) -- 19.31 MB print(Fmt.SizeUnit(0x1ffc00000, "%.0f ")) -- 8 GB print(Fmt.SizeUnit(1500000000000, "%.2f ")) -- 1.36 TB print(Fmt.SizeUnit(1500000000000000, "%.0f ")) -- 1364 TB |
谢谢分享 |
看起来很牛逼。谢谢分享。 |
hua_wuxin 发表于 2025-5-11 08:17 Windows不支持utf8,要转unicode,lua文件的utf8按ansi对待的。 考虑这行xml的font改用小字体。 |
我想把CPU信息中的(R)和(TM)替换为®和™缩短下长度,但得到了乱码。我看了下page.systeminfo.lua已经是UTF8编码的。 请教下有没有简单的解决方法?
![]() |
absman1972 发表于 2025-5-11 00:02 我的local memorysize = subkey:get_value('HardwareInformation.qwMemorySize') or subkey:get_value('HardwareInformation.MemorySize') or 0好像有问题,改成local memorysize, datatype = ...后用string.unpack不正常。改掉后才好了。 |
感谢分享 |
本帖最后由 slore 于 2025-5-11 00:03 编辑 absman1972 发表于 2025-5-10 15:34 local function get_value_by_type(val, type) if type == REG_BINARY then return string.unpack("I" .. #val, val) end -- REG_DWORD, REG_QWORD return val end local mem_val = nil local mem_type = nil local mem_size = 0 mem_val, mem_type = Reg:Read([[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{1722DE72-EC5D-11EF-8E37-806E6F6E6963}\0000]], 'HardwareInformation.qwMemorySize') if mem_val then mem_size = get_value_by_type(mem_val, mem_type) end Alert(mem_size) 我发现办公电脑的集成显卡,显存是 128 MB, 单位转换函数也得改下,除以1024小于1的话, 保持本身单位,不能无脑按GB显示, 0.128 GB 很尴尬。 |
hua_wuxin 发表于 2025-5-10 18:37 Intel集显的HardwareInformation.MemorySize是个REG_BINARY值,regkey:get_value()和Reg:Read()好像都不能正确读取成字符串或者数值。求解决方案。 我的 NVIDIA GeForce RTX 4060 Ti 显卡的内存值是 REG_DWORD 和 REG_QWORD保存的, HardwareInformation.MemorySize 是 4G, HardwareInformation.hwMemorySize 是 8 GB, 所以我用了 hwMemorySize 。 根据2位的反馈,这里需要不少逻辑来处理。 首先, Reg:Read()会返回2个结果,一个是值,一个是类型。 对于REG_BINARY,winapi库的buff是2048,所以2K以内可以读取到, 超过2K的话,value直接是 nil 出错了。 对于4字节,8字节的数值型的话,可以直接读取到的,返回类型是string。 可以通过 string.unpack() 按4字节,8字节数值解出来字节流。 |
谢谢分享 |
本帖最后由 hua_wuxin 于 2025-5-11 02:42 编辑 absman1972 发表于 2025-5-10 15:34 05-11更正:我原来的代码虽然能工作但其实是有问题的,跟absman1972坛友的代码以及楼主大佬1122楼的代码一组合就不知道哪里出错了,导致界面初始化异常。 ![]() 我把isBinary()和binaryToNumber(binaryStr)加进我改过的代码中试了,先判断再转换或者不判断直接转换都不行。我觉得问题应该出在前面读注册表读出不知道是什么奇怪的东西(不是字符串、不是数字)。 你如果没有Intel集显环境的话,可以乱建(比如把Video\{82687041-2D88-11F0-8475-EA3147419290}删掉?)个注册表项测试下。 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{82687041-2D88-11F0-8475-EA3147419290}\0000] "DriverDesc"="Intel(R) Iris(R) Xe Graphics" "HardwareInformation.MemorySize"=hex:00,f0,ff,7f reg query方案的显示效果: ![]() |
本帖最后由 hua_wuxin 于 2025-5-10 22:37 编辑 搞定了。发现同文件里有段local stdout = Cmd.Stdout('cmd.exe /c ipconfig.exe /all'),依葫芦画瓢reg query ... /v HardwareInformation.MemorySize再解析结果就行。 ![]() Intel集显的HardwareInformation.MemorySize是个REG_BINARY值,regkey:get_value()和Reg:Read()好像都不能正确读取成字符串或者数值。求解决方案。 tonumber('7ffff000', 16) = 2147479552 (2GB) ![]() |
hua_wuxin 发表于 2025-5-8 15:14 GPU信息是从 Services\BasicDisplay\Video 下读取 VID,然后到 CurrentControlSet\Control\Video 下面获取显存。 没装显卡驱动的话,无法获取,我测试 beta9a 可以获取 系统基本显示器,还有正式系统的RTX显卡信息。 function gpu_info() local arr = {} local vid = Reg:Read([[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BasicDisplay\Video]], 'VideoID') local gpu = nil if vid then gpu = Reg:Read([[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\]] .. vid ..[[\0000]], {'DriverDesc', 'HardwareInformation.qwMemorySize'}) end if gpu == nil then arr['name'] = '-' arr['memsize'] = 0 else arr['name'] = gpu['DriverDesc'] or '-' arr['memsize'] = gpu['HardwareInformation.qwMemorySize'] or 0 end if arr['memsize'] > 0 then arr['memsize_gb'] = math.ceil(arr['memsize'] / 1024 / 1024 / 1024) else arr['memsize_gb'] = '-' end arr['memsize_info'] = arr['memsize_gb'] .. ' GB' return arr end function localename() return App:Call('os::info', 'localename') end |
感谢分享 |
看起来和explorer差别不大 |
小白完全看不懂![]() |
谢谢分享 |
谢谢分享!!! |
感谢楼主分享 |
感谢分享 |
老大,请教一下: win+e打开资源管理器后,如何让它显示中号的图标 ,而不是默认的列表? |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.