无忧启动论坛

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

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

    [复制链接]
1411#
发表于 2022-5-12 17:55:53 | 显示全部楼层

不同系统表现不一样,我这里也是偶尔会闪一下,但是闪的概率很低
回复

使用道具 举报

1412#
发表于 2022-5-12 22:12:04 | 显示全部楼层
mdyblog 发表于 2022-5-12 22:06
ENVI @PRT2WIT.trans=*1;0x10001 //方法6 全透明

WIN10测试不行

点评

1==>3  详情 回复 发表于 2022-5-12 22:28
回复

使用道具 举报

1413#
发表于 2022-5-12 23:01:39 | 显示全部楼层
mdyblog 发表于 2022-5-12 22:28
哦,1==>3, 适应性更强  
WIn11测试通过

这样子可以了
回复

使用道具 举报

1414#
发表于 2022-5-12 23:49:09 | 显示全部楼层
mdyblog 发表于 2022-5-12 22:28
哦,1==>3, 适应性更强  
WIn11测试通过

这里的1和3的含义,有微软官方文档的链接吗?给一个看下

点评

这是功能扩展。 3=0x01 | 0x02 0x01位: 背景控制, 后面带 具体控制参数 0x00010001 低16位控制文字底色,0x01文字透明。 高16位控制背景擦除,0x01是不擦除背景。 0x02位: 统一模式。避  详情 回复 发表于 2022-5-13 04:38
回复

使用道具 举报

1415#
发表于 2022-5-14 21:17:34 | 显示全部楼层
826773297 发表于 2022-5-14 20:51
对了,dismapi能用pecmd调用吗
https://docs.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/ ...

常规的DLL的C调用API,用PECMD基本都行的。
  1. ENVI &&DismLogErrorsWarningsInfo=2
  2. CALL $--qd --cd --ret:&&DismInitializeRet %&SystemROOT%\System32\DismApi.dll,DismInitialize,#%&DismLogErrorsWarningsInfo%,$C:\MyLogFile.txt,#0
  3. MESS. %&error%<%&DismInitializeRet%>
复制代码

点评

返回0  详情 回复 发表于 2022-5-14 21:26
回复

使用道具 举报

1416#
发表于 2022-5-14 21:28:26 | 显示全部楼层

S_OK=0
没问题的
回复

使用道具 举报

1417#
发表于 2022-5-14 22:16:28 | 显示全部楼层
mdyblog 发表于 2022-5-14 22:08
网卡Net 可用 GUID {4D36E972-E325-11CE-BFC1-08002BE10318}
TEAM DEVI listdev:&V *devclass:~{4D36E97 ...

其实用devclass最不靠谱了,系统里如果网卡驱动没有安装的时候,devclass属性是没有的。

意思就是,设备如果没有安装驱动,很多情况下都没有devclass属性的
回复

使用道具 举报

1418#
发表于 2022-5-15 11:17:54 来自手机 | 显示全部楼层
826773297 发表于 2022-5-15 10:43
m大,pecmd能实现这个api吗

看上去就是C的api调用,可以的呀

点评

来个例子  详情 回复 发表于 2022-5-15 11:22
回复

使用道具 举报

1419#
发表于 2022-5-17 23:32:25 | 显示全部楼层
527104427 发表于 2022-5-17 22:32
sed 反向查找貌似有问题:

envi^ EnviMode=1

LPOS好像也有同样问题。
回复

使用道具 举报

1420#
发表于 2022-5-18 23:26:04 来自手机 | 显示全部楼层
泮安宁 发表于 2022-5-18 22:43
怎么调用内置的exe呢
EXEC --exe:*#100 =!1.exe
但是这个1.exe还需要一个1.dll,把1.dll也内置到pecmd内
...

打包cab,再内置。
用的时候用devi释放

点评

DEVI命令好复杂,大佬能写个例子吗 另外有推荐的CAB打包工具吗  详情 回复 发表于 2022-5-19 10:30
好的,有空试一下  详情 回复 发表于 2022-5-18 23:37
回复

使用道具 举报

1421#
发表于 2022-5-21 20:25:29 | 显示全部楼层
527104427 发表于 2022-5-21 18:20
老大,变量名包含逗号的情况貌似不行:

envi^ EnviMode=1

我靠,这不是被FIND的格式截断了。。。

点评

都好是个常见分段符。 那么 这里是否加上分号冒号替代 %A:~1;1% 或 %A:~1:1%  详情 回复 发表于 2022-5-22 01:12
回复

使用道具 举报

1422#
发表于 2022-5-22 02:16:28 | 显示全部楼层
本帖最后由 红毛樱木 于 2022-5-22 02:34 编辑
mdyblog 发表于 2022-5-22 01:12
都好是个常见分段符。
那么 这里是否加上分号冒号替代 %A:~1;1% 或  %A:~1:1%

我耶觉得应该换个别的符号,不然“,”这玩意在PECMD里太特殊了。
但是如果换了符号,和批处理格式又不统一了,估计使用者用起来有点别扭
回复

使用道具 举报

1423#
发表于 2022-5-22 09:07:10 来自手机 | 显示全部楼层
527104427 发表于 2022-5-22 07:09
m大别改了吧,保持原样挺好,把逗号改了反而不好

最终结果,想想还不如用mstr,哈哈

点评

能用批处理的 %arg:~,4% 这种变量足够了,其它问题都可以自行解决  详情 回复 发表于 2022-5-22 11:25
回复

使用道具 举报

1424#
发表于 2022-5-23 20:04:38 | 显示全部楼层
527104427 发表于 2022-5-23 19:30
发现bug,类型变量名好像无效:

envi^ EnviMode=1

我记得类型的前面是需要带前导.的
regi --init .HKCU\Software\7-Zip\\Lang,b,c

点评

哦  详情 回复 发表于 2022-5-23 20:54
回复

使用道具 举报

1425#
发表于 2022-5-27 16:46:18 | 显示全部楼层
conlin888 发表于 2022-5-27 14:15
DWORD:0x0000abcd的值,在修改二进制数据里看到的是cd ab 00 00,不懂怎么转?能直接查询么?

DWORD直接用
REGI #
用#前缀就行。
REGI #HKLM\SOFTWARE\\test=1
REGI #HKLM\SOFTWARE\\test=0x1
REGI #HKLM\SOFTWARE\\test=0x0000abcd
16进制直接用16进制值表达,10进制直接用10进制数值

点评

谢谢, 我以为可以直接查询呢.  详情 回复 发表于 2022-5-27 17:04
回复

使用道具 举报

1426#
发表于 2022-5-27 19:17:55 | 显示全部楼层
本帖最后由 红毛樱木 于 2022-5-27 19:19 编辑
conlin888 发表于 2022-5-27 17:04
谢谢, 我以为可以直接查询呢.

一样的查询啊,你这本身就是DWORD数据,又不是BINARY类型。BINARY类型的数据,上面老五也给了方法呀,BINARY类型直接用@前导即可。
REGI #HKLM\SOFTWARE\\test,&a
MESS. %&a%
回复

使用道具 举报

1427#
发表于 2022-6-3 13:16:27 | 显示全部楼层
826773297 发表于 2022-6-3 13:12
我就是在内存中处理,速度很慢,vbs已经处理好了,我还在找行号

不会vbs,看不懂vbs。
如果慢,可以用GEFT读位置,再用PUTF修改。
回复

使用道具 举报

1428#
发表于 2022-6-3 13:41:04 来自手机 | 显示全部楼层
826773297 发表于 2022-6-3 13:21
reg是文本,我要根据文本内inf文件名判断文件是否存在,GETF读起始位置,这个好像不着边吧

还是一次性把原理讲清楚吧,讲半天还是瞎猜
回复

使用道具 举报

1429#
发表于 2022-6-5 01:54:40 | 显示全部楼层
SharkyEXE 发表于 2022-6-5 00:44
Hello

Give me, please, pecmd.exe version from 69 to 81 include, x64 architecture

x64目录中的“PECMD原始.EXE”
回复

使用道具 举报

1430#
发表于 2022-6-5 02:12:52 来自手机 | 显示全部楼层
SharkyEXE 发表于 2022-6-5 01:59
Hello

Excusme, i have compiled x64 version pecmd.exe withOUT compress UPX or mpress

你是不是非英语国家用了蹩脚的英语和我们聊天啊,哈哈

点评

他是说我要用64位的pecmd,谢谢你  详情 回复 发表于 2022-6-5 08:29
回复

使用道具 举报

1431#
发表于 2022-6-5 14:48:01 | 显示全部楼层
527104427 发表于 2022-6-5 12:39
swin貌似不能自适应DPI:

#code=950T936

swin -:Win1:-SwinMain1
这样好像可以,不过层级不一样了。。。
回复

使用道具 举报

1432#
发表于 2022-6-6 01:24:31 | 显示全部楼层
回复

使用道具 举报

1433#
发表于 2022-6-6 08:45:13 来自手机 | 显示全部楼层
826773297 发表于 2022-6-6 08:39
这是c吧,我是问pecmd能否实现

c的api,直接用pecmd的call $dll
回复

使用道具 举报

1434#
发表于 2022-6-8 19:30:22 | 显示全部楼层
本帖最后由 红毛樱木 于 2022-6-9 21:53 编辑
826773297 发表于 2022-6-6 08:39
这是c吧,我是问pecmd能否实现
  1. //转换RSMB为DWORD----开始
  2. CODE *,RSMB,*-ANSI,&FirmwareTableProviderSignatureHex
  3. SED -ex &FirmwareTableProviderSignature=0, 0x,,&FirmwareTableProviderSignatureHex
  4. //转换RSMB为DWORD----结束

  5. //第四个参数传入0,则返回获取RSMB结构长度
  6. CALL $--qd --ret:&GetSystemFirmwareTableRet Kernel32.dll,GetSystemFirmwareTable,#%&FirmwareTableProviderSignature%,#0,#0,#0

  7. //判断API是否成功
  8. IFEX #%&GetSystemFirmwareTableRet%=0,EXIT

  9. //设置RSMB长度
  10. ENVI &BufferSize=%&GetSystemFirmwareTableRet%

  11. //申请%&BufferSize%长度的&pFirmwareTableBuffer变量内存空间
  12. SET$# pFirmwareTableBuffer=*%&BufferSize% 0

  13. //获取&pFirmwareTableBuffer数据
  14. CALL $--qd --ret:&GetSystemFirmwareTableRet Kernel32.DLL,GetSystemFirmwareTable,#%&FirmwareTableProviderSignature%,#0,*&pFirmwareTableBuffer,#%&BufferSize%
复制代码


&pFirmwareTableBuffer就是原始数据,自己拆数据吧。(需要出演示代码怎么拆数据的,随时关注这一楼吧,说不定哪天比较闲的时候就拆一下更新了,其实这里的数据有很多C或者C++现成的开源代码示例,只是PECMD2012是脚本语言大家都玩的比较少罢了也没人愿意费劲折腾)

写入一个文件,用winhex查看:
  1. IFEX %&CurDir%\SMBIOSTableData.Bin,FILE %&CurDir%\SMBIOSTableData.Bin
  2. GETF -bin &pFirmwareTableBuffer,0#%&GetSystemFirmwareTableRet%,&SMBIOSTableDataTemp
  3. PUTF %&CurDir%\SMBIOSTableData.Bin,0#,%&SMBIOSTableDataTemp%
复制代码



附件里是3.3版的规范,最新的应该比这个版本高,对着看下先。

DSP0134_3.3.0.pdf (1.5 MB, 下载次数: 22)


---------------------------------------------------
下面这段是演示代码之拆了BIOS_vendor的数据,其他的自己对着慢慢研究吧,具体要参考上面的PDF资料。
注意:请使用网盘中最新的PECMD才可以,2022.06.09更新的PECMD。
  1. ENVI^ ENVIMODE=1
  2. ENVI$ &NL=0d 0a
  3. //转换RSMB为DWORD----开始
  4. CODE *,RSMB,*-ANSI,&FirmwareTableProviderSignatureHex
  5. SED -ex &FirmwareTableProviderSignature=0, 0x,,&FirmwareTableProviderSignatureHex
  6. //转换RSMB为DWORD----结束

  7. //第四个参数传入0,则返回获取RSMB结构长度
  8. CALL $--qd --ret:&GetSystemFirmwareTableRet Kernel32.dll,GetSystemFirmwareTable,#%&FirmwareTableProviderSignature%,#0,#0,#0

  9. //判断API是否成功
  10. IFEX #%&GetSystemFirmwareTableRet%=0,EXIT

  11. //设置RSMB长度
  12. ENVI &BufferSize=%&GetSystemFirmwareTableRet%

  13. //申请%&BufferSize%长度的&pFirmwareTableBuffer变量内存空间
  14. SET$# pFirmwareTableBuffer=*%&BufferSize% 0

  15. //获取&pFirmwareTableBuffer数据
  16. CALL $--qd --ret:&GetSystemFirmwareTableRet Kernel32.DLL,GetSystemFirmwareTable,#%&FirmwareTableProviderSignature%,#0,*&pFirmwareTableBuffer,#%&BufferSize%
  17. //MESS. %&GetSystemFirmwareTableRet%

  18. //SET?数据类型 源PE变量名或地址=变量名:偏移字节数      //取PE对象中指定类型2进制数据。
  19. SET?char pFirmwareTableBuffer=&&Used20CallingMethod:0
  20. CALC &Used20CallingMethod=%&Used20CallingMethod%  //16进制转10进制
  21. SET?char pFirmwareTableBuffer=&&SMBIOSMajorVersion:1
  22. CALC &SMBIOSMajorVersion=%&SMBIOSMajorVersion%
  23. SET?char pFirmwareTableBuffer=&&SMBIOSMinorVersion:2
  24. CALC &SMBIOSMinorVersion=%&SMBIOSMinorVersion%
  25. SET?char pFirmwareTableBuffer=&&DmiRevision:3
  26. CALC &DmiRevision=%&DmiRevision%
  27. SET?int pFirmwareTableBuffer=&&SMBIOSTableDataLength:4

  28. ENVI &&SMBIOS_Version=%&SMBIOSMajorVersion%.%&SMBIOSMinorVersion%
  29. //MESS. Used20CallingMethod:%&Used20CallingMethod%%&NL%SMBIOS版本号:%&SMBIOSMajorVersion%.%&SMBIOSMinorVersion%%&NL%DmiRevision:%&DmiRevision%%&NL%SMBIOS数据长度:%&SMBIOSTableDataLength%

  30. //把数据写入到一个文件中,方便用Winhex查看对比。
  31. IFEX %&CurDir%\SMBIOSTableData.Bin,FILE %&CurDir%\SMBIOSTableData.Bin
  32. GETF -bin &pFirmwareTableBuffer,(1 + 1 + 1 + 1 + 4)#%&SMBIOSTableDataLength%,&SMBIOSTableDataTemp
  33. PUTF %&CurDir%\SMBIOSTableData.Bin,0#,%&SMBIOSTableDataTemp%

  34. //SET-make  PE变量名=[地址|&PE变量名[@[$]偏移]][;[*][[$]字节数]]  //创建PE变量。*为char串
  35. SET-make &SMBIOSTableData=&pFirmwareTableBuffer@(1 + 1 + 1 + 1 + 4);*%&SMBIOSTableDataLength%  //获取实际的SMBIOSTableData数据

  36. SET$# &type=*1 0    //申请1个字节的内存空间,定义一个变量,作为类型变量
  37. SET$# &data_offset=*1 0    //申请1个字节的内存空间,定义一个变量,作为类型长度
  38. ENVI &&Type_Start=0      //定义一个变量,作为当前类型的起始位置值的标记
  39. CODE *ANSI,0x00 0x00,**ANSI,&&TypeKeyWords
  40. CODE *ANSI,0x00,**ANSI,&&CharKeyWords
  41. LOOP #%&Type_Start%>=0,
  42. {*
  43.     //SET-zero  PE变量名=[[$]数值][@[$]偏移]][;[$]数量]  //清除变量的内存,默认0  $:加宽,可多次
  44.     SET-zero type=
  45.     SET-zero data_offset=
  46.     SET?char SMBIOSTableData=&type:%&Type_Start%
  47.     ENVI &&Type_Start_Last=%&Type_Start%
  48.     SET?char SMBIOSTableData=&data_offset:(%&Type_Start% + 1)
  49.     GETF -find &SMBIOSTableData,(%&data_offset% + %&Type_Start%)###0#1#0,&&Type_End,*&&TypeKeyWords
  50.     IFEX $%&Type_End%=-1,EXIT LOOP
  51.     CALC &&Type_Start=%&Type_End% + 2   //尾部加上两个字节的0x00 0x00
  52.     IFEX [ #%&type%=0 & $%&SMBIOS_Version%>=2.0 ],
  53.     {*
  54.         //BIOS Information (Type 0) //这里演示只分析这一段数据
  55.         CALC &BIOS_INFO_Len=%&Type_Start% - %&data_offset% - %&Type_Start_Last%

  56.         //厂商字符串位置
  57.         GETF &SMBIOSTableData,(%&Type_Start_Last% + 1 + 1 + 2)#1,&&BIOS_vendor_CharNum
  58.         GETF -find &SMBIOSTableData,(%&Type_Start_Last% + %&data_offset%)#%&BIOS_INFO_Len%##0#1#0,*&&BIOS_INFO_CharKeyWords,*&&CharKeyWords
  59.         CALL Get_Split_Dmi_Info &BIOS_vendor_CharNum &BIOS_INFO_CharKeyWords &&BIOS_vendor
  60.         MESS. %&BIOS_vendor%
  61.         EXIT LOOP
  62.     }
  63. }

  64. _SUB Get_Split_Dmi_Info
  65.     LOGS
  66.     ^ENVI &&End_CharNum=%%%1%%
  67.     IFEX $%&End_CharNum%=0,
  68.     {*
  69.        EXIT
  70.     }
  71.     ^ENVI &&This_CharKeyWords=%%%2%%
  72.     CALC &&Start_CharNum=%&End_CharNum% - 1
  73.     MSTR * &&Start,&&End=<%&Start_CharNum%><%&CharNum%>&&This_CharKeyWords
  74.     IFEX $%&Start_CharNum%=0,CALC &&Start=%&Type_Start_Last%+%&data_offset%  - 1
  75.     GETF &SMBIOSTableData,(%&Start%+1)#(%&End% - %&Start% - 1),&&This_Info
  76.     CODE ***ANSI,&&This_Info,**UNI,&&This_Info
  77.     MSTR * -trim &This_Info=&This_Info
  78.     ENVI-ret %3=%&This_Info%
  79. _END

  80. EXIT FILE
  81. 结构体
  82. struct RawSMBIOSData
  83. {
  84.     BYTE    Used20CallingMethod;    //1b
  85.     BYTE    SMBIOSMajorVersion;     //1b
  86.     BYTE    SMBIOSMinorVersion;     //1b
  87.     BYTE    DmiRevision;            //1b
  88.     DWORD    Length;                //4b
  89.     BYTE    SMBIOSTableData[];      //Length b
  90. };
复制代码


评分

参与人数 1无忧币 +5 收起 理由
Anson4 + 5 赞一个!

查看全部评分

回复

使用道具 举报

1435#
发表于 2022-6-14 00:22:28 | 显示全部楼层
本帖最后由 红毛樱木 于 2022-6-14 01:00 编辑
527104427 发表于 2022-6-13 22:18
发现bug,现在点击 item 会触发两次命令:

item命令刚定位到出版本具体版本号了。
PECMD2012.1.88.05.87Stable-220418B测试----正常
PECMD2012.1.88.05.87Stable-220418C测试----不正常
--------------------------------------------
EDIT命令也定位到了。PECMD2012.1.88.05.86Stable-220331E----正常
PECMD2012.1.88.05.86Stable-220408----不正常
EDIT测试代码
  1. CALL @MAIN
  2. _sub main,w800h600,test
  3.     EDIT Edit1,L32T244W240H24,C:\Windows,ENVI @Label1=%Edit1%,0x224,0xFCFCFF#0xABACDA
  4. _end
复制代码


-----------------------------------
以上测试是我电脑里保存的版本测试的。


回复

使用道具 举报

1436#
发表于 2022-6-14 15:22:57 来自手机 | 显示全部楼层
Anson4 发表于 2022-6-14 11:04
请教M大,下面这两个关于拖放的使用有什么区别?或者说,_%&WM_DROPFILES% 和  %&WM_DROPFILES% 各自使用 ...

_是后部消息,就是这个消息完成后再执行后面的代码,不知道这样解释准不准,大概是这个意思

点评

谢谢!  发表于 2022-6-14 22:55
_: 是相对系统响应而言的。 再系统响应之后 再响应(执行你写的响应代码)。  详情 回复 发表于 2022-6-14 21:44
回复

使用道具 举报

1437#
发表于 2022-6-15 00:58:21 来自手机 | 显示全部楼层
本帖最后由 红毛樱木 于 2022-6-15 01:55 编辑
Anson4 发表于 2022-6-14 23:03
谢谢回复!
再请教一个问题:
我用 GETF 命令读取 7Z 压缩包的注释内容时,卡在了 GETF -find 上,总是 ...

pecmd内部默认是unicode编码。
你这里的<HWID>需要转ansi,因为你的文件是ansi编码。
另外:目标文件|*目标变量名

回复

使用道具 举报

1438#
发表于 2022-6-15 01:50:33 | 显示全部楼层
本帖最后由 红毛樱木 于 2022-6-15 01:53 编辑
Anson4 发表于 2022-6-14 23:03
谢谢回复!
再请教一个问题:
我用 GETF 命令读取 7Z 压缩包的注释内容时,卡在了 GETF -find 上,总是 ...
  1. ENVI^ EnviMode=1
  2. ENVI &File=%&Curdir%\iPack_Orderdrv.7z
  3. ENVI &sG2=<HWID>
  4. STRL -m &sG3=%&sG2%
  5. CALC &sG4=%&sG3%*2
  6. CODE **-UNI,&sG2,**-ANSI,&sG22
  7. GETF -find %&File%,0#*#%&sG4%#0#1#0,&sGC,*&sG22
  8. MESS. <%&sGC%><%&sG4%>

  9. GETF# %&File%,%&sGC%#*,&V1
  10. CODE **-ANSI,&V1,**-UNI,&V

  11. MESS. %&V%@GETF 模式
复制代码

点评

原来是这样,谢谢红毛!  详情 回复 发表于 2022-6-15 02:06
回复

使用道具 举报

1439#
发表于 2022-6-20 12:51:21 来自手机 | 显示全部楼层
泮安宁 发表于 2022-6-20 12:43
m大,以下代码运行后,编辑框内不填入任何内容,点击开始,程序会自动推出,这个退出的时间有时很快,有时 ...

CALL @
是窗口
后面的
CALL @Start
没必须带@
用法不对

点评

明白了,去掉@确实可以了,谢谢大佬  详情 回复 发表于 2022-6-20 12:59
回复

使用道具 举报

1440#
发表于 2022-6-20 14:30:54 | 显示全部楼层
527104427 发表于 2022-6-20 12:57
M大,这种功能可以实现不:在改分辨率界面,点“识别”按钮,每个屏幕就会弹出数字

画个大的界面,透明,只放一个透明的LABE放数字1,不知道行不行

点评

对。 是这样的。 可以“按颜色透明”。  详情 回复 发表于 2022-6-20 18:22
怎么推送到每个屏幕?  详情 回复 发表于 2022-6-20 17:24
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-1 08:17

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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