无忧启动论坛

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

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

    [复制链接]
15361#
发表于 2020-11-16 13:41:00 | 只看该作者
  1. ENVI^ EnviMode=1
  2. ENVI &&WM_SETTEXT=0x000C
  3. CALL @MAIN
  4. _SUB MAIN,W800H600
  5.     LABE -center -trans &A22,L20T177W760H20,,,,
  6.     ENVI @MAIN.Visible=1
  7.     ENVI @&A22.ID=?&A22WIDL1
  8.     ENVI @@SENDMSG=:&SENDMSG_A;%&A22WIDL1%;%&WM_SETTEXT%;0;$SENDMSG_A......
  9.     //ENVI @窗口和控件名.SENDMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]
  10.     ENVI @&A22.SENDMSG=:&SENDMSG_B;%&WM_SETTEXT%;0;$SENDMSG_B......
  11.     MESS. <%&SENDMSG_A%><%&SENDMSG_B%>
  12. _END
复制代码



回复

使用道具 举报

15362#
发表于 2020-11-19 16:27:50 | 只看该作者
  1. ENVI-longdouble &a=1

  2. ENVI?longdouble0 &a=&b

  3. MESS. %&b%
复制代码


M大看下,longdouble类型是不是不对,这里返回结果是        0x01

回复

使用道具 举报

15363#
 楼主| 发表于 2020-11-21 07:03:40 | 只看该作者
PECMD2012.1.88.05.82Stable-180149测试202011.7z

支持EFI变量操作和查询

┃    │    │※查询固件变量:ENVI ?[$.]返名[,属性名]=FVAR,变量名[;名字空间GUID] // 非pe变量或^或非. 返HEX┃
┃    │    │※操作固件变量:ENVI ?[-v][属性]=FVAR+[$#%],变量名[;名字空间GUID],值     //空值删除 -v:name ┃
┃    │    │                ENVI ?^&v=FVAR,BootOrder  //#字节模式 $16进制 %10进制                       ┃






ENVI?数据类型[s][0[@]] 源PE变量名=变量名[:偏移字节数]
s带符号

这样 负数  看的清楚


ENVI-char &a=0xFF

ENVI?chars &a=&bs
ENVI?char &a=&bu
MESS %&b% %&bu%  // -1 0xFF

点评

M大,EFI变量操作和查询能否写个示例?  详情 回复 发表于 2020-11-21 11:20
longdouble类型还是不支持哎,longdouble不是应该16个字节吗 这里返回的是0x1 4 理论上应该是0x00000000000000000000000000000001 16 吗  详情 回复 发表于 2020-11-21 08:37
回复

使用道具 举报

15364#
 楼主| 发表于 2020-11-21 07:11:28 | 只看该作者
红毛樱木 发表于 2020-11-12 08:54
m大,请问_sub窗口上自定义窗口图标,使用的是哪个API?我的精简版pe使用无效,想针对性的补文件解决这个问 ...

本身不需要什么。

如果用内置图标, 不需要的。windows标准图像类型 估计也几乎不需要。

主要是对文件格式的支持DLL。
1) Gdiplus
2) OLEPRO32.DLL ---》一些扩展图片类型
3)对应凸显类型需要的SLL
回复

使用道具 举报

15365#
发表于 2020-11-21 08:37:04 | 只看该作者
mdyblog 发表于 2020-11-21 07:03
PECMD2012.1.88.05.82Stable-180149测试202011.7z

支持EFI变量操作和查询
  1. ENVI-longdouble &a=1
  2. ENVI-addr ;&Len=&a
  3. ENVI?longdouble0 &a=&b
  4. MESS. %&b% %&Len%
复制代码


longdouble类型还是不支持哎,longdouble不是应该16个字节吗
这里返回的是0x1 4
理论上应该是0x00000000000000000000000000000001 16 吗

点评

继续测试了下。 对 MS的编译器, long doule 和 double, 在2进制内存上 也 完全一样。 ENVI-ldouble &a=1.5 ENVI-double &c=1.5 ENVI-addr ;&Len=&a ENVI?ldouble &a=&b GETF -bin &a,0#8,&ax GETF -bin  详情 回复 发表于 2020-11-21 14:19
1: 用 简写的 ldouble 不是longdouble ENVI-ldouble &a=1.1 ENVI-addr ;&Len=&a ENVI?ldouble &a=&b MESS. [%&b%] [%&Len%] [attachimg]468905[/attachimg] 2:之前的帖子 16进制 对整数 才有实际意义。  详情 回复 发表于 2020-11-21 12:25
回复

使用道具 举报

15366#
发表于 2020-11-21 11:20:48 | 只看该作者
mdyblog 发表于 2020-11-21 07:03
PECMD2012.1.88.05.82Stable-180149测试202011.7z

支持EFI变量操作和查询

M大,EFI变量操作和查询能否写个示例?

点评

[attachimg]468907[/attachimg] 展示下,我前几天拆数据的进度。本来打算出个终极工具 没想到M大直接内置到PECMD里的,不过一大堆资料要自己看拆数据的  详情 回复 发表于 2020-11-21 13:21
效果: [attachimg]468902[/attachimg]  详情 回复 发表于 2020-11-21 12:12
ENVI ?&v=FVAR,BootOrder 数据要自己拆的。 这里的数据类型应该是int  详情 回复 发表于 2020-11-21 11:33
回复

使用道具 举报

15367#
发表于 2020-11-21 11:33:41 来自手机 | 只看该作者
本帖最后由 红毛樱木 于 2020-11-21 13:14 编辑
527104427 发表于 2020-11-21 11:20
M大,EFI变量操作和查询能否写个示例?

ENVI ?&v=FVAR,BootOrder
数据要自己拆的。


来个简单的

获取当前启动项编号:
  1. ENVI ?&v=FVAR,BootCurrent
  2. ENVI?short0@ &v=&a
  3. MESS. %&a%
复制代码



回复

使用道具 举报

15368#
 楼主| 发表于 2020-11-21 12:12:36 | 只看该作者
本帖最后由 mdyblog 于 2020-11-21 12:56 编辑
527104427 发表于 2020-11-21 11:20
M大,EFI变量操作和查询能否写个示例?
返回的 是2进制普通数据。 具体 怎么解, 得 看居图变量的说明。普通EFI字符串变量, 一般就当Wstring看即可
ENVI  ?&V=FVAR,VNAME
MESS. %&V%
即可。

BootOrder_EFI.wcs.zip (739 Bytes, 下载次数: 12)
效果:


点评

@TEAM~ CALC -base=16 #Inx=%inx% | 0x100000~ MSTR Inx=5,4,%Inx% 这句意思是不是说,“|” 是CALC的运算符,“~” 才是分界符? 另外,M大能弄个简单的示例来设置UEFI启动项吗,感谢。  详情 回复 发表于 2020-11-21 17:45
回复

使用道具 举报

15369#
 楼主| 发表于 2020-11-21 12:25:28 | 只看该作者
本帖最后由 mdyblog 于 2020-11-21 12:47 编辑
红毛樱木 发表于 2020-11-21 08:37
longdouble类型还是不支持哎,longdouble不是应该16个字节吗
这里返回的是0x1 4
理论上应该是0x000 ...

1: 用 简写的  ldouble 不是longdouble
ENVI-ldouble &a=1.1
ENVI-addr ;&Len=&a
ENVI?ldouble &a=&b
MESS. [%&b%] [%&Len%]
实际 目前 编译器 还是用  8字节 的  double。 double  和 longdouble 都是8字节。

2:之前的帖子
16进制 对整数 才有实际意义。
浮点数 16进制没有实际意义。
你真要看看  16进制内存 , 用GETF 获得

回复

使用道具 举报

15370#
发表于 2020-11-21 13:21:03 | 只看该作者
527104427 发表于 2020-11-21 11:20
M大,EFI变量操作和查询能否写个示例?



展示下,我前几天拆数据的进度。本来打算出个终极工具

没想到M大直接内置到PECMD里的,不过一大堆资料要自己看拆数据的

点评

太高端了,我已经玩不转了。  详情 回复 发表于 2020-11-21 17:46
之前也是 直接脚本搞的。 太繁琐。 普通网友用就很麻烦。 所以内置下。 方便。 SecureBoot ENVI ?&v=FVAR,SecureBoot 我机器不支持, 返回203(没有这个变量)错误。  详情 回复 发表于 2020-11-21 14:12
回复

使用道具 举报

15371#
 楼主| 发表于 2020-11-21 14:12:21 | 只看该作者
红毛樱木 发表于 2020-11-21 13:21
展示下,我前几天拆数据的进度。本来打算出个终极工具

没想到M大直接内置到PECMD里的, ...

之前也是 直接脚本搞的。  你写到这样,太厉害了!!!
太繁琐。 普通网友用就很麻烦。 所以内置下。 方便。

SecureBoot
ENVI ?&v=FVAR,SecureBoot
我机器不支持, 返回203(没有这个变量)错误。

点评

资料上说 SecureBoot需要2.3.1以上的UEFI版本才支持。  详情 回复 发表于 2020-11-21 14:30
回复

使用道具 举报

15372#
 楼主| 发表于 2020-11-21 14:19:30 | 只看该作者
红毛樱木 发表于 2020-11-21 08:37
longdouble类型还是不支持哎,longdouble不是应该16个字节吗
这里返回的是0x1 4
理论上应该是0x000 ...

继续测试了下。 对 MS的编译器, long doule 和 double,  在2进制内存上 也 完全一样。

ENVI-ldouble &a=1.5
ENVI-double  &c=1.5
ENVI-addr ;&Len=&a
ENVI?ldouble &a=&b
GETF -bin  &a,0#8,&ax
GETF -bin  &c,0#8,&cx
FIND $%ax%=%cx%, SET same=相同! SET same=不相同

MESS. v[%&b%] len[%&Len%]  ldouble[%&ax%]  double[%cx%] , ldouble和double %same%

// v[1.500000] len[8]  ldouble[0x00 0x00 0x00 0x00 0x00 0x00 0xF8 0x3F]  double[0x00 0x00 0x00 0x00 0x00 0x00 0xF8 0x3F] , ldouble和double 相同

点评

了解了,ldouble和double一样了  详情 回复 发表于 2020-11-21 14:38
回复

使用道具 举报

15373#
发表于 2020-11-21 14:30:23 | 只看该作者
mdyblog 发表于 2020-11-21 14:12
之前也是 直接脚本搞的。  你写到这样,太厉害了!!!
太繁琐。 普通网友用就很麻烦。 所以内置下。  ...

资料上说
SecureBoot需要2.3.1以上的UEFI版本才支持。

点评

看来我这机器 EFI FW 有点低。  详情 回复 发表于 2020-11-21 14:35
回复

使用道具 举报

15374#
 楼主| 发表于 2020-11-21 14:35:36 | 只看该作者
红毛樱木 发表于 2020-11-21 14:30
资料上说
SecureBoot需要2.3.1以上的UEFI版本才支持。

看来我这机器 EFI FW 有点低。

点评

不知道怎么获取UEFI固件的版本信息,没翻到资料。  详情 回复 发表于 2020-11-21 14:39
回复

使用道具 举报

15375#
发表于 2020-11-21 14:38:32 | 只看该作者
mdyblog 发表于 2020-11-21 14:19
继续测试了下。 对 MS的编译器, long doule 和 double,  在2进制内存上 也 完全一样。

ENVI-ldouble & ...

了解了,ldouble和double一样了  
回复

使用道具 举报

15376#
发表于 2020-11-21 14:39:59 | 只看该作者
本帖最后由 红毛樱木 于 2020-11-21 15:02 编辑
mdyblog 发表于 2020-11-21 14:35
看来我这机器 EFI FW 有点低。

不知道怎么获取UEFI固件的版本信息(规范的版本,不是BIOS的版本那种信息),没翻到资料。
回复

使用道具 举报

15377#
发表于 2020-11-21 17:45:46 | 只看该作者
mdyblog 发表于 2020-11-21 12:12
返回的 是2进制普通数据。 具体 怎么解, 得 看居图变量的说明。普通EFI字符串变量, 一般就当Wstring看即 ...

@TEAM~ CALC -base=16  #Inx=%inx% | 0x100000~ MSTR Inx=5,4,%Inx%
这句意思是不是说,“|” 是CALC的运算符,“~” 才是分界符?

另外,M大能弄个简单的示例来设置UEFI启动项吗,感谢。



点评

1--2交换顺序 效果: [attachimg]468924[/attachimg]  详情 回复 发表于 2020-11-21 21:39
CALC -base=16 #Inx=%inx% | 0x100000 MSTR Inx=5,4,%Inx% 是的。 设置启动项,流程我知道。具体还没写...... 先用BootOrder获取数据 再修改BootOrder数据 再写回去  详情 回复 发表于 2020-11-21 17:57
回复

使用道具 举报

15378#
发表于 2020-11-21 17:46:14 | 只看该作者
红毛樱木 发表于 2020-11-21 13:21
展示下,我前几天拆数据的进度。本来打算出个终极工具

没想到M大直接内置到PECMD里的, ...

太高端了,我已经玩不转了。
回复

使用道具 举报

15379#
发表于 2020-11-21 17:57:39 | 只看该作者
527104427 发表于 2020-11-21 17:45
@TEAM~ CALC -base=16  #Inx=%inx% | 0x100000~ MSTR Inx=5,4,%Inx%
这句意思是不是说,“|” 是CALC的 ...

CALC -base=16  #Inx=%inx% | 0x100000
MSTR Inx=5,4,%Inx%
是的。
设置启动项,流程我知道。具体还没写......

先用BootOrder获取数据
再修改BootOrder数据
再写回去
回复

使用道具 举报

15380#
 楼主| 发表于 2020-11-21 21:39:32 | 只看该作者
本帖最后由 mdyblog 于 2020-11-21 21:43 编辑
527104427 发表于 2020-11-21 17:45
@TEAM~ CALC -base=16  #Inx=%inx% | 0x100000~ MSTR Inx=5,4,%Inx%
这句意思是不是说,“|” 是CALC的 ...

BootOrder_EFI-Set.wcs.zip (927 Bytes, 下载次数: 9)

ChOrderEFIBoot 2 3 //2 3 交换顺序

效果:


点评

一会SET一会ENVI 貌似不太利于新手学习呀。 建议以后示例代码统一用PECMD2012新规范 首行用 ENVI^ ENVIMODE=1 去掉 ENVI^ ForceLocal=1 变量前面统一用& 比如%a%写成标准的%&a%,虽然%a%简单写法用ENV  详情 回复 发表于 2020-11-22 01:07
提个建议,pecmd内核每次更新的时候,内核版本号能否直接采用日期的方式,比如20201121 因为每次一个版本号用的太久了,而且改动的也比较多,  详情 回复 发表于 2020-11-21 22:11
太赞了! 我们瞎折腾好久的东西,老大瞬间就完成了。 虽然有帮助界面,但还得结合示例才能恍然大悟。  详情 回复 发表于 2020-11-21 22:07
回复

使用道具 举报

15381#
发表于 2020-11-21 22:07:20 | 只看该作者
mdyblog 发表于 2020-11-21 21:39
ChOrderEFIBoot 2 3 //2 3 交换顺序

效果:

太赞了!
我们瞎折腾好久的东西,老大瞬间就完成了。
虽然有帮助界面,但还得结合示例才能恍然大悟。


回复

使用道具 举报

15382#
发表于 2020-11-21 22:11:38 来自手机 | 只看该作者
mdyblog 发表于 2020-11-21 21:39
ChOrderEFIBoot 2 3 //2 3 交换顺序

效果:

提个建议,pecmd内核每次更新的时候,内核版本号能否直接采用日期的方式,比如20201121

因为每次一个版本号用的太久了,而且改动的也比较多,
回复

使用道具 举报

15383#
发表于 2020-11-22 01:07:13 | 只看该作者
mdyblog 发表于 2020-11-21 21:39
ChOrderEFIBoot 2 3 //2 3 交换顺序

效果:

一会SET一会ENVI
貌似不太利于新手学习呀。

建议以后示例代码统一用PECMD2012新规范
首行用
ENVI^ ENVIMODE=1
去掉
ENVI^ ForceLocal=1


变量前面统一用&
比如%a%写成标准的%&a%,虽然%a%简单写法用ENVI^ ForceLocal=1后能和%&a%一样,但是还是比较绕。


不统一,很难推广PECMD的使用。


点评

语法要外行(码农)人也能看懂,才适合推广。。 比如我学过点VB的皮毛,看别人各种语言写的程序源码,有1%是能看懂的 对我来说1%能看懂就大用处了  详情 回复 发表于 2020-11-22 10:49
回复

使用道具 举报

15384#
发表于 2020-11-22 10:49:42 | 只看该作者
红毛樱木 发表于 2020-11-22 01:07
一会SET一会ENVI
貌似不太利于新手学习呀。

语法要外行(码农)人也能看懂,才适合推广。。
比如我学过点VB的皮毛,看别人各种语言写的程序源码,有1%是能看懂的
对我来说1%能看懂就大用处了
回复

使用道具 举报

15385#
发表于 2020-11-22 11:14:57 | 只看该作者
好东西!但不能看得太懂!多看几次试试
回复

使用道具 举报

15386#
发表于 2020-11-22 14:39:39 | 只看该作者
本帖最后由 红毛樱木 于 2020-11-22 14:51 编辑

发现一个很奇怪的地方,不知道是用法不对,还是是BUG。
代码一:
关闭MAIN窗口后,不会执行MESS. OVER,后台进程卡住没退出
  1. ENVI^ EnviMode=1
  2. THREAD* -wait -here CALL @MAIN
  3. MESS. OVER
  4. _SUB MAIN,W800H600
  5. _END
复制代码



代码二:正常
  1. ENVI^ EnviMode=1
  2. THREAD* -wait CALL @MAIN
  3. MESS. OVER
  4. _SUB MAIN,W800H600
  5. _END
复制代码



------------------------
不知是否是THREAD -here的BUG,老大看下.

实测是2018-07-27开始有这个问题,这个日期之前的版本没问题

点评

PECMD2012.1.88.05.82Stable-180149测试202011D.7z 可以了。  详情 回复 发表于 2020-11-22 17:49
先用 CALL @ 初始化下。 ENVI^ EnviMode=1 _SUB WIN1,W287H254,新窗口1,,, _END CALL @ THREAD* -wait -here CALL @WIN1 MESS. OVER EXIT 测试正常 我看看能不能自动处理。  详情 回复 发表于 2020-11-22 16:59
回复

使用道具 举报

15387#
 楼主| 发表于 2020-11-22 16:59:43 | 只看该作者
红毛樱木 发表于 2020-11-22 14:39
发现一个很奇怪的地方,不知道是用法不对,还是是BUG。
代码一:
关闭MAIN窗口后,不会执行MESS. OVER, ...

先用 CALL @
初始化下。
ENVI^ EnviMode=1
_SUB WIN1,W287H254,新窗口1,,,
_END
CALL @
THREAD* -wait -here CALL @WIN1
MESS. OVER
EXIT
测试正常


我看看能不能自动处理。

点评

还有这种,不用THREAD* HERE,也不用&::a的情况下,能改&a的数据吗?  详情 回复 发表于 2020-11-22 17:15
回复

使用道具 举报

15388#
发表于 2020-11-22 17:15:54 | 只看该作者
mdyblog 发表于 2020-11-22 16:59
先用 CALL @
初始化下。
ENVI^ EnviMode=1
  1. ENVI^ EnviMode=1
  2. ENVI &a=1
  3. THREAD* -WAIT ENVI-ret &a=2
  4. MESS. %&a%
复制代码


还有这种,不用THREAD* HERE,也不用&::a的情况下,能改&a的数据吗?

点评

PECMD2012.1.88.05.82Stable-180149测试202011E.7z 也支持 在文件级这样使用。 (不是普通函数中)  详情 回复 发表于 2020-11-22 21:04
这样 用 ,*的函数, 或窗口內的变量 可以这样操作 _SUB FUN,* ENVI &A=1 THREAD* -wait ENVI &A=2 MESS. %&A% _END FUN  详情 回复 发表于 2020-11-22 17:45
回复

使用道具 举报

15389#
 楼主| 发表于 2020-11-22 17:45:51 | 只看该作者
本帖最后由 mdyblog 于 2020-11-22 17:46 编辑
红毛樱木 发表于 2020-11-22 17:15
还有这种,不用THREAD* HERE,也不用&::a的情况下,能改&a的数据吗?

这样 用 ,*的函数, 或窗口內的变量 可以这样操作



_SUB FUN,*
   ENVI &A=1
   THREAD* -wait ENVI &A=2
   MESS. %&A%
_END
FUN


而 -here 就是随处可以操作。
回复

使用道具 举报

15390#
 楼主| 发表于 2020-11-22 17:49:26 | 只看该作者
红毛樱木 发表于 2020-11-22 14:39
发现一个很奇怪的地方,不知道是用法不对,还是是BUG。
代码一:
关闭MAIN窗口后,不会执行MESS. OVER, ...

PECMD2012.1.88.05.82Stable-180149测试202011D.7z  可以了。 内部自动按需处理。

点评

测试通过。  发表于 2020-11-22 21:30
收到,晚点测试  详情 回复 发表于 2020-11-22 19:11
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-20 04:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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