无忧启动论坛

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

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

    [复制链接]
91#
 楼主| 发表于 2018-6-10 21:35:24 | 显示全部楼层
双响炮 发表于 2018-6-10 18:46
我把附件解压后复制到PE的SYSTEM32目录下,通过Winpeshl.ini来调用,可是进入PE后只有一个回收站,并且不能 ...

是什么版本的PE呢?

看配置没错。

桌面只有回收站不能创建文件夹是因为USERPROFILE的路径默认指向
是system32\config下面,导致桌面指向不存在的路径。
cmd,set看下用户环境变量。

按理说 -winpe会自动修改的,能否尝试下在
cmd输入上述几个命令,看看是是否正确,
winpeshl.ini的问题,还是WinXShell的问题。

点评

PE是WIN10的17134版本的ADK生成的。进PE时只有一个回收站时也立即尝试用CMD运行winxshell -winpe,可PE马上重启了。  详情 回复 发表于 2018-6-12 18:52
回复

使用道具 举报

92#
 楼主| 发表于 2018-6-12 21:01:57 | 显示全部楼层
双响炮 发表于 2018-6-12 20:00
我从原版启动,出现CMD时输入winxshell -winpe后出现了桌面,但仍然只有一个回收站,用SET查看变量的结果直 ...

我回头看看,先自己设置下吧。

  1. set USERPROFILE=X:\Users\Default
  2. winxshell.exe -winpe
复制代码

点评

手动改了环境变量,还是不行,就只有一个回收站,是不是我哪里做错了,看来老大还是得弄个简单的教程出来呀 [attachimg]372884[/attachimg]  详情 回复 发表于 2018-6-13 21:46
好的  详情 回复 发表于 2018-6-12 22:18
回复

使用道具 举报

93#
 楼主| 发表于 2018-6-13 23:11:33 | 显示全部楼层
双响炮 发表于 2018-6-13 21:46
手动改了环境变量,还是不行,就只有一个回收站,是不是我哪里做错了,看来老大还是得弄个简单的教程出来 ...

我刚下载了首页的zip,启动boot.wim测试了,好着呢啊。

你X:\Users\Default\Desktop下面有文件沒有啊

默认就是只有回收站,但是你用其他工具在X:\Users\Default\Desktop创建了快捷方式,
文件夹啥的就能看到了啊。
你桌面右键菜单,能否新建,文本文档和文件夹?
如果可以就是着呢。

点评

使用方法: WinXShell.exe运行前导入以下注册表 wxsStub.reg UI_SystemInfo\handle_prop.reg 这个操作是不是必须的呀? 另外,在手工设置环境变量之前右键是不能新建的,后来手工设置以后倒没测试,晚上回家测试  详情 回复 发表于 2018-6-14 13:04
回复

使用道具 举报

94#
 楼主| 发表于 2018-6-22 21:16:49 | 显示全部楼层
hanzsim 发表于 2018-6-22 17:04
使用WinXShell双击快捷方式,竟然不是执行程序,而是打开所在文件夹。是特意这样设计的么?而右击快捷方式 ...

右键打开所在文件夹,导入了wsxStub.reg么。

快捷方式双击的问题以前修复过,感觉是上个版本支持“打开所在位置”功能的时候,
影响到了,我下来看看。

假死1分钟很奇怪。
请确认下,使用环境,哪个版本的PE?还是正常系统?

点评

导入了。我用的是10PEx64,http://bbs.wuyou.net/forum.php?mod=viewthread&tid=378234&extra=&page=63  详情 回复 发表于 2018-6-23 09:22
回复

使用道具 举报

95#
 楼主| 发表于 2018-6-23 12:16:27 | 显示全部楼层
hanzsim 发表于 2018-6-23 09:55
那个PE很不错,可扩展性好,尺寸小,速度快。我在里面加了很多东西,甚至把Office 07都加进去了,装备当主 ...

我直接加载ljycslg发布的Win10_16299_PE_x86&x64_10.31.iso中的x64PE,
点击快捷方式,是正确打开的,不过右键“打开文件夹”功能卡死,TC没有启动。

然后在PE中,加载WinXShell.ISO把最新版本复制到X盘,
导入注册表后运行,
winxshell.exe -winpe
将启动新版WinXShell.exe,快捷方式,右键的“打开文件所在位置”,快捷方式属性的
“文件所在位置(F)”功能均正常。

你可以否测试下?

点评

SystemInfo UI我这里运行有点问题,不知道你那里如何。使用新版的WinXShell.exe加载UI_SystemInfo中的main.jcfg,XML文件中的六个文本:System, Device Management, Remote Setting等等都不显示,其它信息正常;使用  详情 回复 发表于 2018-6-25 05:33
昨天折腾了一天还不行。今天重下了那个PE,结果,没事了! 快速启动工具栏里的快捷方式可以运行。晕倒。估计我整合软件时注册表哪里出了问题了。 我从头再来一遍看看哪里出问题了。  详情 回复 发表于 2018-6-24 09:31
回复

使用道具 举报

96#
 楼主| 发表于 2018-6-25 06:38:17 | 显示全部楼层
hanzsim 发表于 2018-6-25 05:33
现在所有快捷方式功能都是正常的,运行,右键TC,右键winxshell打开位置,快捷方式属性打开所在文件夹 ...

你可以看main.lua,因为我没写死名字,从系统资源加载,要加载sysdm.cpl.mui。l的PE精简掉了。你补充到zh-CN目录就行。
回复

使用道具 举报

97#
 楼主| 发表于 2018-6-25 06:38:23 | 显示全部楼层
hanzsim 发表于 2018-6-25 05:33
现在所有快捷方式功能都是正常的,运行,右键TC,右键winxshell打开位置,快捷方式属性打开所在文件夹 ...

你可以看main.lua,因为我没写死名字,从系统资源加载,要加载sysdm.cpl.mui。l的PE精简掉了。你补充到zh-CN目录就行。

点评

嗯,我也发现了是读取系统dll资源,这个PE里没有,我正在找。  详情 回复 发表于 2018-6-25 07:54
回复

使用道具 举报

98#
 楼主| 发表于 2018-6-25 06:41:20 | 显示全部楼层
hanzsim 发表于 2018-6-25 05:33
现在所有快捷方式功能都是正常的,运行,右键TC,右键winxshell打开位置,快捷方式属性打开所在文件夹 ...

命令调用要补充systemproperties*.exe.
回复

使用道具 举报

99#
 楼主| 发表于 2018-8-2 17:53:17 | 显示全部楼层
tyc600 发表于 2018-8-2 16:47
非常棒的程序。
反馈几个问题:
1. 没选中任何对象的情况下,回车键提示“找不到对象”。

谢谢反馈。

1.确实存在此问题,下个版本修复。
2.文件夹快捷方式会调用explorer.exe处理,下个版本修复为自身打开。

3.能不能给个设置可以取消 关机/重启 的确认对话框。

运行环境是PE?还是Windows?

按理说PE环境的话,-winpe启动,已经定义为wpeuitl.exe shutdown,直接关机,没有确认对话框。
如果是Windows环境,可以在WinXShell.lua中自定义直接调用shutdown程序关机。

  1. function on_startmenu_shutdown()
  2. app:run('shutdown.exe', '-s -t 0')
  3. end
复制代码
回复

使用道具 举报

100#
 楼主| 发表于 2018-8-2 19:55:41 | 显示全部楼层
xintiandi 发表于 2018-8-2 19:16
wes8系统今天测试了一下,加了-wes参数,的确解决了界面卡的的问题,第一次初始化expllorer后,窗口没有自 ...


我没有能用的WES系统,我在WINDOW7下面测试的.

第一次winxshell运行会启动control.exe然后关闭“控制面板”窗口。

方便调试和自定义,这部分逻辑在WinXShell.lua中:
  1. function initcontrolpanel(ver)
  2.   local ctrlpanel_title = ''
  3.   --  4161    Control Panel
  4.   -- 32012    All Control Panel Items
  5.   if ver == '6.1' then
  6.     ctrlpanel_title = app:call('resstr', '#{@shell32.dll,4161}')
  7.   else
  8.     ctrlpanel_title = app:call('resstr', '#{@shell32.dll,32012}')
  9.   end
  10.   app:print(ctrlpanel_title)
  11.   app:run('control.exe')
  12.   app:call('sleep', 500)
  13.   local cp_win = winapi.find_window('CabinetWClass', ctrlpanel_title)
  14.   app:print(string.format("Control Panel Handle:0x%x", cp_win:get_handle()))
  15.   cp_win:send_message(WM_SYSCOMMAND, SC_CLOSE, 0)
  16. end
复制代码


你运行下
  1. WinXShell.exe -console -wes
复制代码

看下输出的窗口标题是否一致(任务管理器->应用程序)。


关机界面的路径改了并演示压缩成ZIP格式,现在调用方法为:
  1. WinXShell.exe -ui -jcfg wxsUI\UI_Shutdown.jcfg
复制代码

(参考UI_TEST.bat)

对于开始菜单的点击事件现在定义在WinXShell.lua中,
  1. function onclick_startmenu_shutdown()
  2.   if is_pe then
  3.     app:run('Wpeutil.exe', 'Shutdown', 0) -- SW_HIDE(0)
  4.     return 0
  5.   elseif is_wes then
  6.     app:run(app_path .. '\\WinXShell.exe', ' -ui -jcfg wxsUI\\UI_Shutdown\\main.jcfg')
  7.     return 0
  8.   end
  9.   return 1
  10. end
复制代码


这里wes模式也忘了改了,你可以改这里,或者把
wxs\UI_Shutdown.zip解压出来为wxs\UI_Shutdown。

-noautostart参数没有取消,另外新版本已经改了,只有登陆后第一次运行winxshell,且
explorer.exe没有运行过,才会启动注册表RUN里面的程序,反复启动不会运行启动程序了.

点评

以前是临时用的,我是用一个热键精灵调用的自动启动的,以前用的winxshell -winpe -noautostart启动的 刚刚是我用的是winxshell -winpe -noautostart -wes启动的,现在pe和wes分成不同的模式了。于是我修改了winxsh  详情 回复 发表于 2018-8-2 23:57
好的。我抽时间在测试一下,以前测试过wes7,是没有问题的,只有wes8才有控制面板卡顿的问题。  详情 回复 发表于 2018-8-2 23:03
回复

使用道具 举报

101#
 楼主| 发表于 2018-8-3 00:24:05 | 显示全部楼层
xintiandi 发表于 2018-8-2 23:57
以前是临时用的,我是用一个热键精灵调用的自动启动的,以前用的winxshell -winpe -noautostart启动的
...

对的,是在main.lua中定义的,你改的我看了也没错...
我用的是

  if ctrl == "restartbtn" then
    suilib.call('run', 'shutdown', '-r -f -t 3600', 0)

保存,点击重启提示我,60分钟后关闭.



你改成
suilib.call('run', 'notepad.exe')
会有记事本弹出么?第四个参数0表示隐藏运行。

还有删除main.lua,用你以前的main.jcfg,会按原来的方式运行。
不过很奇怪,难道main.lua的编码变了?

加-console看看log信息。
WinXShell.exe -console -ui -jcfg wxsUI\UI_Shutdown.jcfg

正常显示log如下:
  1. s t a r t i n g   w i n x s h e l l   d e b u g   l o g

  2. l o a d e d   l o c a l e s
  3. U I   i n i t e d
  4. U I   s e t t e d   s h a d o w
  5. U I   s e t t e d   t r a n s
  6. U I   A d j u s t e d   p o s i t i o n
  7. [LUA ERROR] can't find onshow() function
  8. U I   M e s s a g e L o o p
  9. [LUA ERROR] can't find onload() function
  10. s e t f o c u s
复制代码
回复

使用道具 举报

102#
 楼主| 发表于 2018-8-4 10:31:52 | 显示全部楼层
xintiandi 发表于 2018-8-3 00:32
今天再次测试,把之前的winxshell全部删除重新配置了一遍,wes8还是有问题,弹出了一个黑框,就关掉了。再 ...

感谢详细反馈信息!

  1. 建议去除对wes7第一次启动winxshell,自动打开control.exe的功能。
复制代码


6.1和6.2的版本只是为了获取关闭时用的窗口标题。
启动控制面板和sleep等待500毫秒是下面的那2个命令。

function initcontrolpanel(ver)
  ...
  app:run('control.exe')
  app:call('sleep', 500)
end

WES7不需要的话,在onfirstrun()函数上添加版本判断,只有WES8才初始化控制面板就可以了.

function onfirstrun()
  if is_wes and win_ver == '6.2' then
    app:call('SetTimer', ICP_TIMER_ID, 200) -- use timer to make main shell running
  end
end


就要把输入密码和winxshell.jcfg中存的密码比对,密码最好是md5方式存储,输入对了密码,才启动winxshell,没有密码就看不到界面,不知道算不算奇葩需求。


防止别人误启动?也不算奇葩需求,即使这样的需求通过WinXShell.lua也可以实现呢。

WinXShell.lua中的onload()函数,或者onshell()函数中可以添加
密码参数对比然后结束程序,但是我没有提供 app:quit()接口,不改程序的话,可以参考关闭控制面板那样获取shell窗口,然后发送退出命令,
不过这是启动了瞬间然后把它结束掉.感觉还是我后面版本加上一个退出程序的命令好些.

md5加密的话,有现成的lua库
https://github.com/kikito/md5.lua
下载放到lua_helper文件夹中,
WinXShell.lua如下判断:
  1. local md5 = require('md5')
  2. password = getopt(cmd_line, '-p')
  3. if md5.sumhexa(password) ~= '900150983cd24fb0d6963f7d28e17f72' then    -- 'abc'字符串的md5
  4.   closeshell()
  5. end
复制代码


不过有个问题,这个代码写到lua脚本的话,别人把这个删除了,就可以启动了,无所谓么?还是要我写到程序里面,而且必须配置password_md5信息,否则启动不了,
如果要这样就得做个专用版了.


WES8,我先试试你的系统,如果有测试环境就好办了。

点评

好的。我先试试你说的方法,密码写道脚本lua里面就可以了。配置了密码启动后,winxshell才会加载输入密码框,如果不配置,那就是正常的启动,这个只是防君子,不是防小人的。不用考虑到其他文件删除,或者更高级的隐  详情 回复 发表于 2018-8-4 10:54
回复

使用道具 举报

103#
 楼主| 发表于 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" />
回复

使用道具 举报

104#
 楼主| 发表于 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
回复

使用道具 举报

105#
 楼主| 发表于 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导出(资源编辑器)。
回复

使用道具 举报

106#
 楼主| 发表于 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
回复

使用道具 举报

107#
 楼主| 发表于 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
复制代码

回复

使用道具 举报

108#
 楼主| 发表于 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
回复

使用道具 举报

109#
 楼主| 发表于 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模式,
不过如果你开过一次全屏的得关闭掉进程再运行才有效.
回复

使用道具 举报

110#
 楼主| 发表于 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
回复

使用道具 举报

111#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

112#
 楼主| 发表于 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
回复

使用道具 举报

113#
 楼主| 发表于 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
回复

使用道具 举报

114#
 楼主| 发表于 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了。
回复

使用道具 举报

115#
 楼主| 发表于 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
回复

使用道具 举报

116#
 楼主| 发表于 2018-8-10 00:20:14 | 显示全部楼层
本帖最后由 slore 于 2018-8-11 00:41 编辑

在调试给UI_Luncher添加【所有程序】程序树(纯lua脚本),
比微软,classicshell,startisback的开始菜单要好的地方是,
可以直接加载多个U盘上的程序,不用创建快捷方式,
而且自定义性高。估计周末能赶不上。。。

就暂时只小幅更新下完善了WES对应的部分。




  1. D:\Dev\Shell\WinXShell>lua53 winapi_test.lua
  2. H:\Start Menu\Programs\*.*
  3. 11对战平台
  4.    11对战平台.lnk
  5.    卸载11对战平台.lnk
  6. 7-Zip
  7.    7-Zip File Manager.lnk
  8.    7-Zip Help.lnk
  9. Accessibility
  10.    Desktop.ini
  11.    Speech Recognition.lnk
  12. Accessories
  13.    Math Input Panel.lnk
  14.    Paint.lnk
  15.    Quick Assist.lnk
  16.    Remote Desktop Connection.lnk
  17.    Snipping Tool.lnk
  18.    Steps Recorder.lnk
  19.    System Tools
  20.       Character Map.lnk
复制代码


100行lua处理dir /b /s的文件列表,生成<TreeNode>的xml格式,可以显示图标了。
300个图标花了2,3秒略有卡顿,开机缓存估计好些。


回复

使用道具 举报

117#
 楼主| 发表于 2018-8-10 12:49:54 | 显示全部楼层
本帖最后由 slore 于 2018-8-10 12:56 编辑
xintiandi 发表于 2018-8-10 12:40
winxshell越来越完善了。lua的代码主要是一些函数和方法不知道怎么用,对于非编程人员是有难度,

local ...


第二句是调试用的,拼了一个字符串,用来判断窗口是否找到,不要也可以。
send_message和你想到MessageBox这种提示消息不同,这个是给应用程序发送消息,
这里是SYSCOMMAND,窗口标题右键的系统菜单,SC_CLOSE表示关闭。

这个Windows编程的程序消息机制,与使用语言无关,C#,C++,C,VB,au3,易语言等等
都是要这样做,C/C++的标准API就是SendMessage。
https://msdn.microsoft.com/zh-cn/library/ms644950(v=vs.85).aspx

界面上可能要点击很多菜单,界面才能选择到的动作,最终是给窗体自己发送消息,让它触发要做的事情。
这里是lua找到窗体句柄了,直接发送过去,就不用人为点击了。(其实可以再好点100毫秒循环监控窗口发现就隐藏然后退出,不用等1秒,根本察觉不到启动control的,不过就运行1次没必要)
当然还有可以获取进程ID,然后调用TerminateProcess的方式结束程序,不过这种相当于
任务管理器,右键 强制结束, 有些暴力。

点评

那就是对windowsapi相关的操作了。看来不管什么语言,在windows机制上运行都要遵循api规则,这块了解得少,之所以学了一下c#和delphi差不多。图形化的,相对简单得多,lua好像是基于c语言搞的吧。 wes7,8模式其实是  详情 回复 发表于 2018-8-10 13:17
回复

使用道具 举报

118#
 楼主| 发表于 2018-8-16 20:34:26 | 显示全部楼层
本帖最后由 slore 于 2018-8-16 22:16 编辑
Mouri_Naruto 发表于 2018-8-16 19:36
我关注这个项目已经有一段时间……

但是,有个疑惑就是,源代码在哪里?


ReactOS的explorer的代码是LGPL的协议,lib库形式的话,不用开源,
这部分修改了几个BUG而已,ROS的explorer的代码很完整,本身直接编译就能用。不过我改的部分也开源了,
源码是已pexlorer的git项目提交的,中间忘了什么原因那个工程被删除掉了。

我的版本修改内容如下:
  • x64对应
  • 桌面壁纸显示
  • 任务栏自绘(自定义颜色)
  • 托盘图标支持x64,x86程序
  • xml配置改为json配置
  • 任务栏支持大图标
  • 删除多桌面切换
  • 删除多文档文件管理器(太老土,功能弱,bug多)
  • 利用文件打开对话框作为文件管理器
  • API钩子,实现第三方Shell的自动刷新
  • 实现Appbar消息,使得支持ClassicShell第三方开始菜单



UI的部分,完全是普通的带UI界面的APP而已,跟shell没有关系这2年不时的更新的是这部分的,
和shell一点关系都没有,所以这部分目前是闭源的,毕竟就像用pecmd,autoit画界面一样,没有啥技术含量。
而且是xml+lua脚本组合,都是没有加密的文本,代码可见。
(因为PE没有运行库,静态编译体积大,所以2个exe合并到一起发布而已。)

现在在旅游,回头回家了把pexlorer的部分重新再在github上推送一次。

点评

很感谢您能回复 如果源代码推送后,我想帮你完善一下你的项目的实现 文件管理器的话,我记得Windows有COM接口可以在Win32窗体上绘制资源管理器文件查看控件(类似打开文件对话框中的文件浏览那块那样的效果)  详情 回复 发表于 2018-8-20 00:33

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

119#
 楼主| 发表于 2018-8-20 21:54:55 | 显示全部楼层
Mouri_Naruto 发表于 2018-8-20 00:36
有关系的
因为使用含有GPL许可的所有项目和使用LGPL许可的静态编译的项目都有问询源代码在哪里的权利
...

推送到PExplorer这里了,
里面有2个分支PExlorer_v1.0,引入UI库前的最后一个Tag版本,
另外WinXShell改名后对文件管理器也有部分修正,所以把这部分修正单独抽取出来,
推送到WinXShell_shellpart的分支了,可以无依赖VS2015编译成功。

WinXShell的仓库预留着吧。

评分

参与人数 2无忧币 +6 收起 理由
Win7MEMZ-BX + 1 很给力!
Mouri_Naruto + 5 很给力!

查看全部评分

回复

使用道具 举报

120#
 楼主| 发表于 2018-8-20 21:57:50 | 显示全部楼层
本帖最后由 slore 于 2018-8-20 22:19 编辑
Mouri_Naruto 发表于 2018-8-20 00:33
很感谢您能回复

如果源代码推送后,我想帮你完善一下你的项目的实现

文件管理器的话,我记得Windows有COM接口可以在Win32窗体上绘制资源管理器文件查看控件(类似打开文件对话框中的文件浏览那块那样的效果)


你是指CLSID_ExplorerBrowser



这个我试过,可以出来多窗口完美的文件树列表和文件内容视图,但是没有导航部分,WIN7之后导航的地址栏可以按目录跳转很实用,
所以就用【文件打开对话框】来模拟了,这个是带导航栏的,而且代码简单,隐藏 一个文本框,2个按钮就行了。

点评

看效果应该是我之前尝试的那个接口  详情 回复 发表于 2018-8-23 15:31
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 20:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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