无忧启动论坛

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

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

    [复制链接]
391#
发表于 2018-8-6 10:27:42 | 只看该作者
在请教2个问题,
1、下图中,框上那个菜单,怎么退出。
2、系统信息中的,那些文字都可以随便自定义吗。

点评

问题2 系统信息,所有的文字,所有的图片,所有的按钮,所有的布局, 全部是自定义的。(UI_SystemInfo\main.xml + main.lua) 这个画面布局和信息,是我高仿系统的信息做的,为了支持不同语言, 从dll中获取  详情 回复 发表于 2018-8-6 11:44
问题1. 这个画面,默认是失去焦点的时候自动隐藏,要完全退出的话, 右上角有个隐藏的退出按钮(鼠标移动上去鼠标会变)。 你也可以自己任意做一个任意大小任意颜色按钮放到任意位置, 名字叫 ::closebtn的话  详情 回复 发表于 2018-8-6 11:39
回复

使用道具 举报

392#
 楼主| 发表于 2018-8-6 11:39:38 | 只看该作者
xintiandi 发表于 2018-8-6 10:27
在请教2个问题,
1、下图中,框上那个菜单,怎么退出。
2、系统信息中的,那些文字都可以随便自定义吗。
...

问题1.
这个画面,默认是失去焦点的时候自动隐藏,要完全退出的话,
右上角有个隐藏的退出按钮(鼠标移动上去鼠标会变)。

你也可以自己任意做一个任意大小任意颜色按钮放到任意位置,
名字叫 ::closebtn的话,点击就会退出。(UI_Launcher\main.xml)

如果想像其他的窗口一样表示一个X的话,只用补充红色部分添加按钮背景图片即可。
<Button name="::closebtn" bkimage="file='close.png'" width="16" height="16" padding="0,2,2,0" />
回复

使用道具 举报

393#
 楼主| 发表于 2018-8-6 11:44:51 | 只看该作者
xintiandi 发表于 2018-8-6 10:27
在请教2个问题,
1、下图中,框上那个菜单,怎么退出。
2、系统信息中的,那些文字都可以随便自定义吗。
...

问题2

系统信息,所有的文字,所有的图片,所有的按钮,所有的布局,
全部是自定义的。(UI_SystemInfo\main.xml + main.lua)

这个画面布局和信息,是我高仿系统的信息做的,为了支持不同语言,
从dll中获取的资源字符串,你完全可以直接写到main.xml(text="任意文字")


xml的图片,属性和常见的html很相似的,你可以自己试着改改,
如果改不出来的话,把你想要的样子给我说下,我给你说怎么改。

点评

好的。我可以试试,我测试wes7系统,被裁剪了默认点击我的电脑右键属性,是没有信息框的,没有任何反应。就是说是点不出系统信息的,我导入了系统信息下的注册表项,还是调不出来,难道这个功能要依赖系统的某些文件  详情 回复 发表于 2018-8-6 11:59
回复

使用道具 举报

394#
发表于 2018-8-6 11:53:00 | 只看该作者
谢谢分享
回复

使用道具 举报

395#
发表于 2018-8-6 11:59:25 | 只看该作者
本帖最后由 xintiandi 于 2018-8-7 15:18 编辑
slore 发表于 2018-8-6 11:44
问题2

系统信息,所有的文字,所有的图片,所有的按钮,所有的布局,


好的。那我抽时间在试试UI_Launcher,就是失焦后没有关闭,我才来请教。我测试的是wes7系统,被裁剪了的,默认点击我的电脑右键属性,是没有信息框的,没有任何反应。就是说是点不出系统信息的,我导入了handle_prop.reg注册表项,还是调不出来,难道这个功能要依赖系统的某些文件。看了一下main.lua,里面需要systemcpl.dll ,shell32.dll,包括sysdm.cpl等对应的mui文件都在系统里面加入了的。类似这样的代码不太懂 '#{@shell32.dll,31057}' ,猜测是调用shell32.dll中31057对应的文本,我用编辑器打开shell32.dll里面没有找到31057这项。main.lua中,哪些对应 windows版本,系统 等字样。下面代码中的几个按钮到比较好理解,要不然只能在有text的地方都改了试试,看效果。
  sui:find('title').text = '#{@systemcpl.dll,1}'
  sui:find('cphome_btn').text = '#{@shell32.dll,31057}'
  sui:find('devmgmt_btn').text = '#{@systemcpl.dll,100}'
  sui:find('rmt_btn').text = '#{@systemcpl.dll,101}'
  sui:find('protect_btn').text = '#{@systemcpl.dll,102}'
  sui:find('adv_btn').text = '#{@systemcpl.dll,103}'
  sui:find('act_btn').text = '#{@systemcpl.dll,105}'
  sui:find('more_label').text = '#{@shell32.dll,31091}'
  sui:find('update_btn').text = '#{@systemcpl.dll,104}'

点评

这个是【我的电脑属性】菜单的调用命令自定义,把菜单点击修改为 WinXShell.exe -ui -jcfg wxsUI%uI_SystemInfo\main.jcfg 因为依赖WinXShell.exe的路径,所以写到WinXShell.lua中(regist_system_property函  详情 回复 发表于 2018-8-6 12:53
没写注释确实不方便,不过 lua尽量保持纯英文来支持不同语言的系统,不然英文系统上编码错误无法加载。 对于字符串资源的对应,主要是看main.xml的定义。 你可以看下,基本上是从左到右,从上到下布局的。  详情 回复 发表于 2018-8-6 12:45
回复

使用道具 举报

396#
 楼主| 发表于 2018-8-6 12:34:27 | 只看该作者
>好的。那我抽时间在试试UI_Launcher,就是失焦后没有关闭,我才来请教。

哦,这个有2种模式,全屏模式 UI_Launcher-full.jcfg,是失焦不退出的,再点击一次快捷方式才关闭。
普通的1/4左下角的方式是,失焦退出。(主要差别参数是UI_Launcher.jcfg中的"ondeactive":"hide")

我没有那么多平台,主要测试了WIN7和WIN10。

dll文件要用专门的资源查看工具,文本编辑器看不了的。
比如Resource Hacker。对了,WIN7之后微软引入了多语言资源mui,
虽然代码是'#{@systemcpl.dll,1}',
实际获取到资源的是“zh-CN\systemcpl.dll.mui”中找资源。

WES7是不是少这个文件。如果没有,可以自己写死,比如:

sui:find('devmgmt_btn').text = '#{@systemcpl.dll,100}'改成
sui:find('devmgmt_btn').text = '设备管理器'直接写死,如果系统不考虑太多通用性的话。

对了,WIN8的图片我忘了放了。

  1.   if vernum then -- need Administrator's right privilege to read the HKLM items
  2.     sui:find('brand_img').bkimage = "file='" .. vernum .. ".png'"
  3.   end
复制代码


当时是从注册表读取版本信息的,然后加载资源目录的6.X.png。
但是注册表这个地方要管理员权限,如果获取不到就是默认的WIN7的。
所以新版本加一个一个 app:info('ver')方法来获取系统版本信息,
但是这个方法只给WinXShell.lua用了,下个版本添加上。

目前的话,自己可以手动修改WES8的main.lua为
删除if vernum then
sui:find('brand_img').bkimage = "file='6.2.png'"
删除end

图片资源从C:\Windows\Branding\Basebrd\basebrd.dll导出(资源编辑器)。
回复

使用道具 举报

397#
 楼主| 发表于 2018-8-6 12:45:32 | 只看该作者
xintiandi 发表于 2018-8-6 11:59
好的。那我抽时间在试试UI_Launcher,就是失焦后没有关闭,我才来请教。我测试的是wes7系统,被裁剪了 ...
main.lua中,哪些对应 windows版本,系统 等字样。


没写注释确实不方便,不过 lua尽量保持纯英文来支持不同语言的系统,不然英文系统上编码错误无法加载。

对于字符串资源的对应,主要是看main.xml的定义。

你可以看下,基本上是从左到右,从上到下布局的。

               <VerticalLayout height="120">
                    <HorizontalLayout height="20" >
                    <Label name="system_group" width="100" />
                    <Control height="2" padding="0,12,10,0" bkcolor="#FFCCCCCC" />
                  </HorizontalLayout>
                  <HorizontalLayout>
                    <VerticalLayout width="200" >
                      <Label name="cpu_label" />
                      <Label name="mem_label" />
                      <Label name="arch_label" />
                    </VerticalLayout>
                    <VerticalLayout padding="20,0,0,0">
                      <Label name="cpu_text" />
                      <Label name="mem_text" />
                      <Label name="arch_text" />
                    </VerticalLayout>
                  </HorizontalLayout>
                </VerticalLayout>
                <VerticalLayout height="150">
                  <HorizontalLayout height="20">
                    <Label name="host_group" width="420" />
                    <Control height="2" padding="0,12,10,0" bkcolor="#FFCCCCCC" />
                  </HorizontalLayout>
                  <HorizontalLayout>
                    <VerticalLayout width="200" >
                      <Label name="host_label" />
                      <Label name="fqdn_label" />
                      <Label name="desc_label" />
                      <Label name="workgroup_label" />
                    </VerticalLayout>
                    <VerticalLayout padding="20,0,0,0">
                      <Label name="host_text" />
                      <Label name="fqdn_text" />
                      <Label name="desc_text" />
                      <Label name="workgroup_text" />
                    </VerticalLayout>

system_group的下面,有CPU的LABEL标签(CPU),CPU的文本(实际内容),内存,构架信息。
host_group是机器组的信息,机器名,域名等。

所以”Windows 版本“ 对应的是
  set_res('system_group', 1542)

点评

我试了一下windows版本对应 set_res('edition_group',1538), 我修改成 sui:find('edition_group').text = 'windows版本',就显示出来了。 set_text('status_group', 'Windows #{@shell32.dll,8981}'),我理解  详情 回复 发表于 2018-8-6 21:29
回复

使用道具 举报

398#
 楼主| 发表于 2018-8-6 12:53:49 | 只看该作者
xintiandi 发表于 2018-8-6 11:59
好的。那我抽时间在试试UI_Launcher,就是失焦后没有关闭,我才来请教。我测试的是wes7系统,被裁剪了 ...

我导入了handle_prop.reg注册表项,还是调不出来,难道这个功能要依赖系统的某些文件。


这个是【我的电脑属性】菜单的调用命令自定义,把菜单点击修改为
WinXShell.exe -ui -jcfg wxsUI\UI_SystemInfo\main.jcfg

因为依赖WinXShell.exe的路径,所以写到WinXShell.lua中(regist_system_property函数)。
当WinXShell启动时会更新,但是我觉得只有PE需要,所以加了判断只有PE才更新注册表。

UI_SystemInfo中的handle_prop.reg实际上不用了,为了知道让人知道怎么改的,
而且也不大,就保留了。
但是是旧版本的,UI路径不对了。自己手动导入的话,要修改下路径。

你可以先改成notepad.exe,看看你的WES7上是否可以劫持(右键属性可以打开一个记事本程序),如果可以,
那么改成UI_SystemInfo的新路径就可以了(WinXShell.exe是静态编译,不需要系统特别的依赖)。
  1. HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\properties\command
复制代码

回复

使用道具 举报

399#
发表于 2018-8-6 13:13:28 | 只看该作者
好的。感谢这么详细的回复,我晚上抽时间在试试,那些dll,我是用Resource Hacker查看的,很多还是找不到,不知道为什么能显示出来。lua语言以前没有接触过。之前自学了一段时间的c#,c#的相关的应用层面的代码还基本能看懂个七七八八,只要涉及到api相关的还是看不懂。上周也是抽空余时间,改造了一个进程守护的软件,正打算用来守护winxshell,这几天要生二娃了,测试时间也不会太多。

点评

Resource Hacker看 字符串资源 不是看左边树的号,左边的一个节点开右边的详细里面,包含很多ID。  发表于 2018-8-6 15:09
回复

使用道具 举报

400#
发表于 2018-8-6 21:29:32 | 只看该作者
本帖最后由 xintiandi 于 2018-8-7 15:18 编辑
slore 发表于 2018-8-6 12:45
没写注释确实不方便,不过 lua尽量保持纯英文来支持不同语言的系统,不然英文系统上编码错误无法加载 ...


我试了一下windows版本对应  set_res('edition_group',1538), 不是system_group'我修改成  sui:find('edition_group').text = 'windows版本',就显示出来了。
  set_text('status_group', 'Windows #{@shell32.dll,8981}'),我理解的是设置Windows状态,显示的文本是shell32.dll中8981资源处。
  
看代码应该是shell32中的8981资源。截图上已经显示了windows状态,已使用。ResourceHacker 打开shell32.dll就是没有找到8981.

我的系统中没有notepad,我平时编辑文本都是用的绿色版本的notepad2来代替的。所以右键菜单里面也没有建立记事本的快捷方式。不好验证是否可以劫持系统属性。

点评

画面看差了,确实是edition_group才对. #399 说了,得看mui文件. 你截图的位置的话是system32\zh-CN\shell32.dll.mui [attachimg]378010[/attachimg] 这个系统状态是因为本来是激活,对PE没啥用,反而PE有  详情 回复 发表于 2018-8-6 22:11
回复

使用道具 举报

401#
 楼主| 发表于 2018-8-6 22:11:48 | 只看该作者
xintiandi 发表于 2018-8-6 21:29
我试了一下windows版本对应  set_res('edition_group',1538), 不是system_group'我修改成  sui:find(' ...

画面看差了,确实是edition_group才对.

dll文件要用专门的资源查看工具,文本编辑器看不了的。
比如Resource Hacker。对了,WIN7之后微软引入了多语言资源mui,
虽然代码是'#{@systemcpl.dll,1}',
实际获取到资源的是“zh-CN\systemcpl.dll.mui”中找资源。


#399 说了,得看mui文件.

你截图的位置的话是system32\zh-CN\shell32.dll.mui


这个系统状态是因为本来是激活,对PE没啥用,反而PE有运行时间限制,所以给出一个动态刷新的例子.


notepad.exe只是个程序,你没的话,用cmd.exe也行,主要系统程序的话,不用写路径方便测试.

点评

好的,是我没有仔细看,等我测试完了再一起反馈。  详情 回复 发表于 2018-8-6 22:45
回复

使用道具 举报

402#
发表于 2018-8-6 22:45:45 | 只看该作者
本帖最后由 xintiandi 于 2018-8-7 00:15 编辑
slore 发表于 2018-8-6 22:11
画面看差了,确实是edition_group才对.


好的,是我没有仔细看,等我测试完了再一起反馈。
试了UI_Launcher,默认是全屏方式,的确要再次运行的时候,才会关闭,但是1/4屏的方式,我按照你说差异修改了。一直没有出现过,始终是全屏的方式。所以没有测试到是不是失焦就关闭。我的电脑属性的问题完美解决,可以打开了。

点评

手动添加我的电脑属性菜单的话,菜单名建议改成 "属性(&R)", 我的注册表是默认用"属性",然后WinXShell.exe运行时自动(PE下)从系统菜单加载更新(还是为了适应全语言版本).  详情 回复 发表于 2018-8-7 00:34
UI_Laucher你不用改啊,有2个配置文件(UI_Launcher.jcfg,UI_Launcher-full.jcfg)。 WinXShell.exe -ui -jcfg wxsUI%uI_Laucher.jcfg就是普通的1/4模式, 不过如果你开过一次全屏的得关闭掉进程再运行才有效.  详情 回复 发表于 2018-8-7 00:32
回复

使用道具 举报

403#
 楼主| 发表于 2018-8-7 00:32:00 | 只看该作者
xintiandi 发表于 2018-8-6 22:45
好的,是我没有仔细看,等我测试完了再一起反馈。
试了UI_Launcher,默认是全屏方式,的确要再次运行 ...

UI_Laucher你不用改啊,有2个配置文件(UI_Launcher.jcfg,UI_Launcher-full.jcfg)。
WinXShell.exe -ui -jcfg wxsUI\UI_Laucher.jcfg就是普通的1/4模式,
不过如果你开过一次全屏的得关闭掉进程再运行才有效.
回复

使用道具 举报

404#
 楼主| 发表于 2018-8-7 00:34:06 | 只看该作者
xintiandi 发表于 2018-8-6 22:45
好的,是我没有仔细看,等我测试完了再一起反馈。
试了UI_Launcher,默认是全屏方式,的确要再次运行 ...

手动添加我的电脑属性菜单的话,菜单名建议改成 "属性(&R)", 我的注册表是默认用"属性",然后WinXShell.exe运行时自动(PE下)从系统菜单加载更新(还是为了适应全语言版本).

点评

没有找到你说的改属性的地方,1/4屏的问题解决了。原来是测试的时候,我修改的配置文件在另外一个文件夹下,我搞混了。还有一个就是上次说的md5密码问题,如果是改成配置的话,winxshell启动的时候就得去检测是否有  详情 回复 发表于 2018-8-7 00:53
回复

使用道具 举报

405#
发表于 2018-8-7 00:53:53 | 只看该作者
本帖最后由 xintiandi 于 2018-8-7 01:00 编辑
slore 发表于 2018-8-7 00:34
手动添加我的电脑属性菜单的话,菜单名建议改成 "属性(&R)", 我的注册表是默认用"属性",然后WinXShell.exe ...


没有找到你说的改属性的地方,1/4屏的问题解决了。原来是测试的时候,我修改的配置文件在另外一个文件夹下,我搞混了。还有一个就是上次说的md5密码问题,如果是改成配置的话,winxshell启动的时候就得去检测是否有这个配置项,否则就要暂停,错误还要退出,得增加退出函数。

你说的是这样改吧
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\properties]
@="@shell32.dll,-33555"
;@="&Property"? shortcut name with be updated by WinXShell for locale language
"Position(&R)"="Bottom"

点评

基本思路是:下载md5.lua放到lua_helper,然后在onshell函数中添加-p参数检测, 如果-p abc的话,通过,否则1秒后给shell窗口发送退出命令,shell退出。 附件覆盖到WinXShell目录即可。(如果自己修改了WinXShel  详情 回复 发表于 2018-8-7 14:25
回复

使用道具 举报

406#
 楼主| 发表于 2018-8-7 14:25:16 | 只看该作者
本帖最后由 slore 于 2018-8-7 14:28 编辑
xintiandi 发表于 2018-8-7 00:53
没有找到你说的改属性的地方,1/4屏的问题解决了。原来是测试的时候,我修改的配置文件在另外一个文件 ...


基本思路是:下载md5.lua放到lua_helper,然后在onshell函数中添加-p参数检测,
如果-p abc的话,通过,否则1秒后给shell窗口发送退出命令,shell退出。

附件覆盖到WinXShell目录即可。(如果自己修改了WinXShell.lua记得代码合并(我尽可能的将相关代码写在了一起)。)
主要修改:

新增check_password(),close_shell_check(),close_shell()函数,
onshell()函数添加close_shell_check调用。
ontimer(tid)函数添加1秒后结束shell的动作。

  1.   elseif tid == CS_TIMER_ID then
  2.     app:call('KillTimer', tid)
  3.     close_shell()
  4.   end
复制代码




密码验证WinXShell.lua
closeshell.zip (6.82 KB, 下载次数: 3)

用法:
WinXShell.exe -wes 启动后退出(无密码)
WinXShell.exe -wes -p 启动后退出(无密码)
WinXShell.exe -wes -p abcd 启动后退出(密码校验失败)
WinXShell.exe -wes -p abc   正常启动

密码自定义时可自己修改WinXShell.lua中的以下判断语句:

  1. local function check_password()
  2.   ...
  3.   if md5.sumhexa(pwd) ~= '900150983cd24fb0d6963f7d28e17f72' then    -- [abc]'s md5
  4.     return 1 -- bad password
  5.   end
  6.   return 0 -- right password
  7. end
复制代码
回复

使用道具 举报

407#
发表于 2018-8-7 15:24:41 | 只看该作者
本帖最后由 xintiandi 于 2018-8-7 16:45 编辑

wes7中如果少了explorer.exe。控制面板会出错。不知道这个有没有办法处理,让彻底抛弃explerer,不知道控制面板里面的那些功能是否还要依赖explorer


托盘图标显示感觉有问题,没有和windows同步,有些图标是隐藏的,但是点击折叠后隐藏不了。


系统信息是不是少了截图中的3处,还没有模仿完。


带密码参数-p启动的问题,我测试没有成功,我测试的结果是,不管带不带-p参数都能启动 随便填-a -b 之类的也能启动,没有退出,难道没有对合法参数做检测。我下载的关闭函数,用beyong,核对了差异,融合后替换的。看调试信息应该是关闭函数没有执行,check password 已经生效了。

点评

1.不要explorer,访问控制面板 基本不可能。因为很多UI都是explorer窗口显示的。 防火墙,网络,用户,程序卸载等。 下面这类弹出独立的对话框窗口的是可以不用(*.cpl)。 区域语言,鼠标,声音,具体网卡  详情 回复 发表于 2018-8-7 21:21
回复

使用道具 举报

408#
 楼主| 发表于 2018-8-7 21:21:34 | 只看该作者
xintiandi 发表于 2018-8-7 15:24
wes7中如果少了explorer.exe。控制面板会出错。不知道这个有没有办法处理,让彻底抛弃explerer,不知道控制 ...

1.不要explorer,访问控制面板

基本不可能。因为很多UI都是explorer窗口显示的。
防火墙,网络,用户,程序卸载等。

下面这类弹出独立的对话框窗口的是可以不用(*.cpl)。
区域语言,鼠标,声音,具体网卡的属性设定等。

2.托盘图标隐藏

系统的设定的信息保存注册表,而且是很复杂的二进制流,
不是不能解析,PE用不到,所以就没有处理。

折叠是可以隐藏的,不是WinXShell自己设定的隐藏图标才可以,
时钟区域右键,通知图标设定。。。可以设置显示隐藏,
不过好像这个信息我没保存 ,所以再启动得再设定。。。

  1. [HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify]
  2. "IconStreams"=hex:14,00,00,00,07,00,00,00,01,00,01,00,35,00,00,00,14,00,00,00,\
  3.   7b,00,53,00,33,00,38,00,4f,00,53,00,34,00,30,00,34,00,2d,00,31,00,51,00,34,\
  4.   00,33,00,2d,00,34,00,32,00,53,00,32,00,2d,00,39,00,33,00,30,00,35,00,2d,00,\
  5.   36,00,37,00,51,00,52,00,30,00,4f,00,32,00,38,00,53,00,50,00,32,00,33,00,7d,\
  6.   00,5c,00,72,00,6b,00,63,00,79,00,62,00,65,00,72,00,65,00,2e,00,72,00,6b,00,\
  7.   72,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  8.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  9.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  10.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  11.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  12.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  13.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  14.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  15.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  16.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  17.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  18.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  19.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  20.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  21.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  22.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  23.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,8d,c1,00,00,00,\
  24.   00,00,00,02,00,00,00,e2,07,02,00,46,00,46,00,56,00,51,00,2d,00,46,00,59,00,\
  25.   42,00,45,00,52,00,0a,00,56,00,61,00,67,00,72,00,65,00,61,00,72,00,67,00,20,\
  26.   00,bf,8b,ee,95,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  27.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  28.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  29.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  30.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  31.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  32.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  33.   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
复制代码



3.系统信息的 分级,激活信息没有。
这些信息对PE没有用,而且也没调查这个信息怎么获取,
写个假的10.0也没啥意义,所以就没有。
需要自己改main.xml来添加。(label组件设置下bkimage)

4.密码验证
看输出一个有no password,并输出了Win Handle字样,另一个,
说明执行了结束SHELL窗口的代码了,但是没有获取到窗口信息,
窗口句柄为0x0,正常情况应该有个数据的。

我在WIN10和WIN7下都测试了,Shell_TrayWnd可以获取到的。
可否测试下,只用我的WinXShell.jcfg,或者把你的上传我试试看,
是不是合并的时候有什么地方变化了。

点评

没错,微软把那些功能和explorer绑得太死,要完全踢掉explorer,只能全部自己开发,每个组件都是一个不小工程,感觉这工作量太巨大。  详情 回复 发表于 2018-9-19 21:36
winxshell.jcfg没有改,只改了winxshell.lua,我都打包了。  详情 回复 发表于 2018-8-7 21:51
回复

使用道具 举报

409#
发表于 2018-8-7 21:51:10 | 只看该作者
slore 发表于 2018-8-7 21:21
1.不要explorer,访问控制面板

基本不可能。因为很多UI都是explorer窗口显示的。

winxshell.jcfg没有改,只改了winxshell.lua,我都打包了。

winxshelltest.rar

4.51 KB, 下载次数: 1, 下载积分: 无忧币 -2

点评

x86不能正常结束shell的原因知道了,lua的winapi.dll库的编译选项搞错了,编译成UNICODE版了,字符串无法正常工作,注册表的操作也不对。 下载附件替换就好了。另外,lua自带了os.exit命令可以退出程序,所以在o  详情 回复 发表于 2018-8-8 20:51
发现问题了,是x86版的不行,x64好的。那就是lua的winapi库的问题,这样的话,我得下载代码调试下(不是我写的)。如果不行我还是周末把WinXShell.exe更新下添加一个app:exit()方法就行了。  发表于 2018-8-7 23:32
回复

使用道具 举报

410#
 楼主| 发表于 2018-8-8 20:51:50 | 只看该作者
xintiandi 发表于 2018-8-7 21:51
winxshell.jcfg没有改,只改了winxshell.lua,我都打包了。

x86不能正常结束shell的原因知道了,lua的winapi.dll库的编译选项搞错了,编译成UNICODE版了,字符串无法正常工作,注册表的操作也不对。
winapi_x86.zip (141.72 KB, 下载次数: 2)

下载附件替换就好了。另外,lua自带了os.exit命令可以退出程序,所以在onload上也加了密码不正确直接退出,这样不用等shell创建了再退出。

点评

感谢这么快就解决了。我测试wes7的x86和64系统都没有问题,密码问题解决了。现在就剩wes8的控制面板问题,等解决了,我在一起测试wes8的系统,但是现在只有x86的wes8。  详情 回复 发表于 2018-8-8 23:11
回复

使用道具 举报

411#
发表于 2018-8-8 23:11:04 | 只看该作者
slore 发表于 2018-8-8 20:51
x86不能正常结束shell的原因知道了,lua的winapi.dll库的编译选项搞错了,编译成UNICODE版了,字符串无法 ...

感谢这么快就解决了。我测试wes7的x86和64系统都没有问题,密码问题解决了。现在就剩wes8的控制面板问题,等解决了,我在一起测试wes8的系统,但是现在只有x86的wes8。

点评

控制面板慢,有没有可能本来就是这样子? 因为在win8及之后的pe会有这种情况。 试试原始的explorer打开网络中心是否慢,就是任务栏网络图标右键那里。  详情 回复 发表于 2018-8-9 01:18
你共享的系统下载了,还没时间装,等周末吧。好了回复你。  发表于 2018-8-8 23:15
回复

使用道具 举报

412#
发表于 2018-8-9 01:18:28 来自手机 | 只看该作者
xintiandi 发表于 2018-8-8 23:11
感谢这么快就解决了。我测试wes7的x86和64系统都没有问题,密码问题解决了。现在就剩wes8的控制面板问题 ...

控制面板慢,有没有可能本来就是这样子?
因为在win8及之后的pe会有这种情况。
试试原始的explorer打开网络中心是否慢,就是任务栏网络图标右键那里。

点评

原始的explorer打开不会慢,只要explorer运行一次后,在用winxshell打开就正常了。但是如果explorer不运行,winxshell先运行,关闭后在打开explorer也会变慢,但是只要explorer运行了一次后,重启之前就正常。  详情 回复 发表于 2018-8-9 10:40
回复

使用道具 举报

413#
发表于 2018-8-9 10:40:00 | 只看该作者
本帖最后由 xintiandi 于 2018-8-9 10:42 编辑
红毛樱木 发表于 2018-8-9 01:18
控制面板慢,有没有可能本来就是这样子?
因为在win8及之后的pe会有这种情况。
试试原始的explorer打开 ...


原始的控制面板打开不会慢,只要explorer运行一次后,在运行winxshell打开控制面板就正常了。但是如果explorer不运行,winxshell先运行,不管是否关闭winxshell 在打开控制面板也会变慢;只要explorer运行了一次后,在打开控制面板都正常,只是第一次运行控制面板有变慢的问题,重启之前都是正常的

点评

正常的win8系统啥情况?  详情 回复 发表于 2018-8-9 11:18
回复

使用道具 举报

414#
发表于 2018-8-9 11:18:30 | 只看该作者
xintiandi 发表于 2018-8-9 10:40
原始的控制面板打开不会慢,只要explorer运行一次后,在运行winxshell打开控制面板就正常了。但是如果e ...

正常的win8系统啥情况?

点评

我杂忘了直接用正常Windows 8系统测试。。。 测试了,存在同样问题,原因也搞明白了,和之前说的一样,先 打开一次control初始化某个信息(explorer干的,或者不存在是控制面板的explorer程序会干), 然后就不卡  详情 回复 发表于 2018-8-9 13:20
我没有用过正常的win8系统,现在用win10,我们用的wes7或8都是采用Command Prompt Shell with Custom Shell Support 方式,默认没有桌面的。we8下直接打开控制面板,也就延时2,3秒,但是在winxshell中打开控制面板,  详情 回复 发表于 2018-8-9 11:52
回复

使用道具 举报

415#
发表于 2018-8-9 11:52:39 | 只看该作者
本帖最后由 xintiandi 于 2018-8-9 12:00 编辑
红毛樱木 发表于 2018-8-9 11:18
正常的win8系统啥情况?


我没有用过正常的win8系统,现在用win10,我们用的wes7或8都是采用Command Prompt Shell with Custom Shell Support 方式,默认没有桌面的。wes8下直接打开控制面板,也就延时2,3秒,但是在winxshell中打开控制面板,要等差不多2分钟才出来界面,explorer到很快。这个问题等楼主测试了,应该就能解释了。个人感觉还是和初始化桌面之类的有关,感觉像是winxshell没有去执行explorer启动中的某个动作,所以control处于等待中,等到超时了,在启动的control,所以才会慢。但是如果winxshell先运行后,也会对控制面板有影响,感觉又有冲突,不知道怎么回事,最终还是得等楼主来揭晓答案。

点评

原因和回避方法已经在windows 8.1上确认了,再wes8上我再确认下就可以更新了。 onfirstrun()函数中 初始化控制面板 太晚了,打算添加一个 beforeshell()函数,然后将"是否是第一次运行“作为 app:info("isfirst  详情 回复 发表于 2018-8-9 13:26
回复

使用道具 举报

416#
 楼主| 发表于 2018-8-9 13:20:52 | 只看该作者
红毛樱木 发表于 2018-8-9 11:18
正常的win8系统啥情况?

我杂忘了直接用正常Windows 8系统测试。。。
测试了,存在同样问题,原因也搞明白了,和之前说的一样,先
打开一次control初始化某个信息(explorer干的,或者不存在是控制面板的explorer程序会干),
然后就不卡了。

但是我之前代码导出的lua函数onfirstrun()是我的shell创建了才运行,导致
control以为explorer shell已经运行,还是会卡住。

在onload()方法中打开 控制面板再立马关闭就OK了。
回复

使用道具 举报

417#
 楼主| 发表于 2018-8-9 13:26:07 | 只看该作者
本帖最后由 slore 于 2018-8-9 13:28 编辑
xintiandi 发表于 2018-8-9 11:52
我没有用过正常的win8系统,现在用win10,我们用的wes7或8都是采用Command Prompt Shell with Custom Sh ...


原因和回避方法已经在windows 8.1上确认了,再wes8上我再确认下就可以更新了。

解决方法就是原来说的,在WinXShell注册为shell窗口前,调用control.exe初始化一次。
但是我是在onfirstrun()函数中 初始化控制面板 太晚了(已经注册了shell),打算添加一个
beforeshell()函数,然后将"是否是第一次运行“作为app:info("isfirstrun")方式来处理。

  1. function beforeshell()
  2.   if app:info("isfirstrun") then
  3.       initcontrolpanel(win_ver)
  4.   end
  5. end
复制代码



目前的版本也可以在onload()中处理,不过每次启动shell都要 在一瞬间打开控制面板 关闭控制面板。
(按理说shell启动次数少,也无所谓)

function onload()
  -- app:call('run', 'notepad.exe')
  -- app:run('notepad.exe')
  app:print('WinXShell.exe loading...')
  app:print('CommandLine:' .. cmd_line)
  app:print('WINPE:'.. tostring(is_pe))
  app:print('WES:' .. tostring(is_wes))
  if is_wes then
    initcontrolpanel(win_ver)
  end

end

点评

刚刚测试了没有通过。奇怪的是如果wes7测试,改成 if ver == '6.1' then,只有弹窗出来的,自是关不掉而已,改成6.2,再wes8上,没有任何弹窗出来。 function initcontrolpanel(ver) local ctrlpanel_title =  详情 回复 发表于 2018-8-9 13:55
回复

使用道具 举报

418#
发表于 2018-8-9 13:55:22 | 只看该作者
本帖最后由 xintiandi 于 2018-8-9 14:12 编辑
slore 发表于 2018-8-9 13:26
原因和回避方法已经在windows 8.1上确认了,再wes8上我再确认下就可以更新了。

解决方法就是原来说 ...


刚刚测试了没有通过。奇怪的是如果wes7测试,改成  if ver == '6.1' then,是有弹窗出来的,只是自己不会关掉而已,改成6.2,再wes8上,没有任何弹窗出来。

function initcontrolpanel(ver)
  local ctrlpanel_title = ''
  --  4161    Control Panel
  -- 32012    All Control Panel Items
  if ver == '6.2' then
    ctrlpanel_title = app:call('resstr', '#{@shell32.dll,4161}')
  else
    ctrlpanel_title = app:call('resstr', '#{@shell32.dll,32012}')
  end
  app:print(ctrlpanel_title)
  app:run('control.exe')
  app:call('sleep', 500)
  local cp_win = winapi.find_window('CabinetWClass', ctrlpanel_title)
  app:print(string.format("Control Panel Handle:0x%x", cp_win:get_handle()))
  cp_win:send_message(WM_SYSCOMMAND, SC_CLOSE, 0)
end


按照你说的改成这样了
function onload()
  -- app:call('run', 'notepad.exe')
  -- app:run('notepad.exe')
  app:print('WinXShell.exe loading...')
  app:print('CommandLine:' .. cmd_line)
  app:print('WINPE:'.. tostring(is_pe))
  app:print('WES:' .. tostring(is_wes))
  if is_wes and check_password() ~= 0 then
    os.exit(1)
  end
  if is_wes then
    initcontrolpanel(win_ver)
  end
end

下面2个截图一个是启动后只运行control,另一个是启动后先运行winxshell再运行control


点评

加一行:app:print('VER:' .. tostring(win_ver)),另外WinXShell.exe -console -wes -noautostart -p abc来测试。  发表于 2018-8-9 15:30
回复

使用道具 举报

419#
发表于 2018-8-9 17:43:02 | 只看该作者
本帖最后由 xintiandi 于 2018-8-9 17:57 编辑

现在测试可以了。能打开控制面板了。之前不知道怎么回事不行,不知道是不是和编码有关,因为beyoud打开的文档有些识别成ansi,有些又是utf-8,lua和jcfg好像也有差异。有时我用记事本改的。

之前出现了一次这样的提示,不知道是怎么导致的。

点评

确认这个方式可以就好。那我就在shell创建前导出一个beforeshell接口。  发表于 2018-8-9 18:31
有地方改错了,语法错误,或者if,end没对齐,导致脚本整体解析失败。函数都找不到就无效了。  发表于 2018-8-9 18:29
回复

使用道具 举报

420#
发表于 2018-8-9 22:18:19 | 只看该作者
本帖最后由 xintiandi 于 2018-8-9 23:43 编辑

这种方式没有问题,可以更新了。但是仅wes8需要这么处理,wes7是不需要的,我把function onfirstrun()里面的ver改成6.2,意思就是wes8的时候才初始化,但是经常在wes7下也会运行control,没有wes10的环境,就没有办法测试。
上次也遇到这样的问题,不知道后来怎么又好了,好像是全部替换了一遍文件,感觉替换的都没改动。现在是wes7 x64也出现一样的情况,我在wes8下测试好了,直接拷贝到wes7下的,我用的x64位版本的winxshell测试的,运行后,控制面板又自动打开了,感觉判断版本那有点问题。wes7,弹出控制面板,wes8也就解决了。如果wes7不弹出控制面板,wes8好像也不行了。不知道是哪个地方的配置又出了问题,这样的问题之前测试也遇到过,如果没记错的话,也出现了2,3次。就像下午测试wes8不行,晚上回来后文件都没有替换,就加了console运行一次后,就可以了。真是奇怪了。难道和虚拟机有关。之前测试的winxshellx86版本已经完美了。



找到问题了,下面这3行,wes8加上,wes7删除。感觉代码有点问题哦,对于wes8没有问题,但是对于wes7,好像有问题,假如是wes模式,就会初始化控制面板,控制面板的函数中,版本不等于6.2的时候也会执行control.exe
之前也是照搬没有仔细想,改成和onfirstrun函数中一致就好了。既判断是wes,也要判断版本是6.2,才初始化控制面板就行了。好了,所有问题完美解决。

  1.   if is_wes and win_ver == '6.2' then
  2.     initcontrolpanel(win_ver)
  3.   end
复制代码


点评

:+1: 导出lua控制看来对飞编程的还是有点复杂啊。上面回复只是解决方法的验证代码,正式的WinXShell.lua, WES7,8我根据你反馈的状况在改,打算周末更新下的。(EXE也要改:onfirstrun将被干掉,增加beforeshell) WES   发表于 2018-8-10 00:12

评分

参与人数 1无忧币 +5 收起 理由
slore + 5 自己动手,丰衣足食!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-28 06:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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