slore 发表于 2017-3-10 02:00:54

[预览]WinXShell - 可创建现代风格窗口界面的Windows Shell

本帖最后由 slore 于 2018-11-19 20:59 编辑

此自定义界面组件(xml+lua),已经整合到以下帖子中,并且完成了WIFI,声音设置,日历,我的电脑属性,分辨率设置,关机(窗口模式,全屏模式),仿WIN10开始菜单完成了一半,
最新版本请参照该主题。

explorer再见,WinXShell你好

程序效果:




使用方法
WinXShell.exe -ui -jcfg UI_xxxxx\main.jcfg


随着Windows 10的更新,原来越多的设置改为了
新的UI方式,但是目前PE还不支持此类应用。
(开始菜单,设置,网络,声音等)

现在,原来的PExlorer引入了duilib轻量的
DirectUI库,可通过xml格式直接绘制具有现代风格,
andriod等UI的界面了。

因为PExlorer是支持XP以上全部Windows版本,
不限语言,不限制7,8,10大版本,各种测试预览版本的
Shell,且Windows可能以后只有X了,所以将导入
UI库的PExlorer更名WinXShell并分离维护。
(导入UI库,导致体积会增大500KB)

除了界面可以自定义以外,按钮事件之类的,
我也希望大家可以发挥自己创造,所以结合已有
的json配置文件,定义了一套简单语法来完成初始化,
和按钮响应,滑块移动等动作,以及UI元素交互,
修改内容,颜色,大小等。

挺佩服用PECMD写界面的大神,以及PECMD的解析,
界面代码我作为一个码农都看不懂,自己做解析器发现
编译原理都遗忘到大学课堂了,所以定义了的语法是
类汇编的,可以避免括号等嵌套的处理。有机会的话,
会升级解释器,可以识别更高级的写法。

放出预览版是希望大家提案想要的功能,想要的界面交互,
以及UI大神把界面做好我就直接用啦。
代码写了不到3天,关机画面和设定的画面这个例子,
我找ICON,调颜色就花了1天 :(

搜索:duilib 可以看看界面支持什么元素。
基本常用的控件都是有的,虽然我改善了下
xml界面定义的语法,不过元素没有少,应该都可以用。
(JCFG的交互目前只处理了Button,Combo)

TODO:
资源ZIP形式打包

UI_显示设置
* 分辨率      ●
* 屏幕旋转  □
* 亮度设置滑块 □

UI_我的电脑属性
* Windows 版本信息
* CPU
* 机器信息
* 内存

UI_声音设置
* 调节滑块,静音按钮
* 快速启动栏,托盘位置关联

UI_WIFI连接
* WIFI列表
* 密码输入
* 连接实现(外部命令,内部函数)

UI_开始菜单
* 手机风格?
* 文件列表扫描,自动图标配置
* 右键菜单


jcfg代码说明:
代码定义整体不能使用双引号,需要时请使用@q转义,想直接使用@的时候,用 @@。(@后面不是q的话,@可以不转义)
OnLoad配置,主要进行元素初始化。

= #元素名, 值或函数;

值:整数,字符串,TRUE,FALSE
函数: 以()结尾(::开头的为内部函数)。
字符串: '开头,'结尾的字符串。内部需要利用'的话,请使用\s转义,想直接使用\的时候,用 \\。(\后面不是s的话,\可以不转义)

OnClick配置,各个元素点击后调用。
PUSH 值;

将值压入参数栈,供函数使用。

CALL 函数名;

调用函数。

内部函数:
目前实现了
GetResolutionList() - 获取可用分辨率列表;
GetCurrentResolution() - 获取当前分辨率;
SetResolution(多参数) - 设置分辨率;
Close() - 关闭界面;
Command(参数个数, 命令名) - 调用JS_CMD定义的外部程序;

需要参数的函数,第一个参数为参数个数,方便以后功能扩展。

例如:
设置分辨率可,
PUSH 768;
PUSH 1024;
PUSH 2;
CALL ::SetResolution();

也可,
PUSH '1024x768';
PUSH 1;
CALL ::SetResolution();

也可,
PUSH #元素;<-将获取元素的文本内容,格式(宽x高)
PUSH 1;
CALL ::SetResolution();

TODO:
后续可以使用.来具体指定获取和设置的元素属性
#元素.TEXT
#元素.COLOR
#元素.HEIGHT
#元素.xxx


XML界面定义

    <Style name="PowerBtn" value="height=&quot;40&quot; textcolor=&quot;#FF000000&quot; hottextcolor=&quot;#FFFFFF&quot; hotimage=&quot;color='#FFF48FB1'&quot;" />
    <VerticalLayout bkcolor="#FFF9F9F9">
      <HorizontalLayout height="32" bkcolor="#FFC2185B">
            <Label text="电源" textpadding="5,0,0,0" />
            <Control />
            <Button name="::closebtn" bkimage="file='close.png'" width="16" height="16" padding="0,8,5,0" />
      </HorizontalLayout>
      <VerticalLayout height="150" bkcolor="#FFE91E63">
            <HorizontalLayout>
                <Control />
                <VerticalLayout width="128">
                  <Button normalimage="power.png" height="48" width="48" enabled="false" padding="40,16,0,0" />
                  <Label text="关闭计算机" font="24" textpadding="0,10,0,0" />
                </VerticalLayout>
                <Control />
            </HorizontalLayout>
      </VerticalLayout>
      <VerticalLayout>
            <Button name="shutdownbtn" text="关机" style="PowerBtn" />
            <Button name="restartbtn" text="重启" style="PowerBtn"/>
            <Button text="休眠" style="PowerBtn" enabled="false" />
            <Button text="待机" style="PowerBtn" enabled="false" />
      </VerticalLayout>
    </VerticalLayout>

JCFG动作定义

{
"name":"UI_Shutdown",
"baricon":"power.ico",
"OnClick":
{
"shutdownbtn":"
PUSH 'test';
PUSH 1;
CALL ::Command();
CALL ::Close();
",
"restartbtn":"
PUSH 'reboot';
PUSH 1;
CALL ::Command();
CALL ::Close();
"
},
"JS_CMD":
{
    "test": {
         "command": "notepad.exe",
         "parameters": "C:\\Windows\\win.ini"
    },
    "reboot": {
       "command": "Wpeutil.exe",
       "parameters": "Reboot"
    },
    "shutdown": {
      "command": "Wpeutil.exe",
      "parameters": "Shutdown"
    }
}
}


红毛樱木 发表于 2017-3-10 02:50:35

沙发是我的了,强贴留名

lingqing 发表于 2017-3-10 07:03:03

强大

23456 发表于 2017-3-10 07:19:33

谢谢分享

邪恶海盗 发表于 2017-3-10 07:42:55

原来的PEXlorer???

addaadda 发表于 2017-3-10 08:19:21

干嘛的,多点文字介绍下么

享β亻寸木东 发表于 2017-3-10 08:21:49

顶{:2_135:}顶{:2_135:}顶{:2_135:}

窄口牛 发表于 2017-3-10 09:57:35

看不懂,但很厉害的样子

青青草 发表于 2017-3-10 10:14:04

谢谢分享!

newyun 发表于 2017-3-10 10:34:55

不知道干什么用的。。。。
页: [1] 2 3
查看完整版本: [预览]WinXShell - 可创建现代风格窗口界面的Windows Shell