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

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

   火... [复制链接]
 楼主| 发表于 2013-3-11 17:41:58 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-11 17:09 发表
ENVI &&&ALIAS *opt Beep=CALL $**ret:* Kernel32.dll,Beep,
Beep ,#750,#300  //Beep &ret,#750,#300
是这样用吗?怎么没有声音出现啊?

site能增加返回文件个数功能吗?



是这样用的, 嘟的一声。
是不是你的机器没有蜂鸣器和显卡。 或在 设备管理里面禁止了。
换一台新的机器试试。

要不直接下面试试。

CALL $**ret:* Kernel32.dll,Beep, ,#1750,#1300   //大点, 长点

[ 本帖最后由 mdyblog 于 2013-3-11 17:44 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-11 17:43:06 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-11 17:09 发表
ENVI &&&ALIAS *opt Beep=CALL $**ret:* Kernel32.dll,Beep,
Beep ,#750,#300  //Beep &ret,#750,#300
是这样用吗?怎么没有声音出现啊?

site能增加返回文件个数功能吗?

什么文件个数?
回复

使用道具 举报

 楼主| 发表于 2013-3-11 18:21:05 | 显示全部楼层

生日快乐歌的脚本


ENVI &&&FORCELOCAL=1
ENVI &&&EnviMode=1
ENVI &&&ALIAS *opt Beep=CALL $**ret:* Kernel32.dll,Beep,

//生日快乐歌的音符频率表,不同频率由不同的延时来决定
SET &SONG_TONE=212 212 190 212 159 169 212 212 190 212 142 159 212 212 106 126 159 169 190 119 119 126 159 142 159 0

//生日快乐歌节拍表,节拍决定每个音符的演奏长短
SET &SONG_LONG=9 3 12 12 12 24 9 3 12 12 12 24 9 3 12 12 12 12 12 9 3 12 12 12 24 0

_SUB PlayMusic
    TEAM  SET &I=1| SET &tone=1| SET &tm=1
    LOOP $1=1,
    {
        MSTR * &tone=<%I%>%1
        MSTR * &tm=<%I%>%2
        IFEX $%tone%<1,  EXIT LOOP
        CALC #tone=400000 / %tone%  //延时转为频率
        CALC #&tm=%tm% * 20
        Beep ,#%tone%,#%tm%
        CALC #I=%I% + 1
    }
_END
PlayMusic SONG_TONE SONG_LONG  

   

生日快乐.wcs.zip

570 Bytes, 下载次数: 11

回复

使用道具 举报

发表于 2013-3-11 18:47:13 | 显示全部楼层
比如文件夹里面所有文件的个数    文件夹里面匹配条件的文件个数像d:\a\*.exe这样的文件的个数
回复

使用道具 举报

发表于 2013-3-11 18:50:42 | 显示全部楼层
好像没有安装蜂鸣器
回复

使用道具 举报

 楼主| 发表于 2013-3-11 19:02:07 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-11 18:50 发表
好像没有安装蜂鸣器

笔记本都没有的。 笔记本是用声卡放出来的。
Snap3.gif

[ 本帖最后由 mdyblog 于 2013-3-11 19:10 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-11 19:04:59 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-11 18:47 发表
比如文件夹里面所有文件的个数    文件夹里面匹配条件的文件个数像d:\a\*.exe这样的文件的个数

ENVI &&&FORCELOCAL=1
SET &I=0
FORX  d:\*.*,,0, CALC #I=%I%+1
MESS %&I%
回复

使用道具 举报

发表于 2013-3-11 19:43:34 | 显示全部楼层
原帖由 mdyblog 于 2013-3-11 19:04 发表

ENVI &&&FORCELOCAL=1
SET &I=0
FORX  d:\*.*,,0, CALC #I=%I%+1
MESS %&I%

这种方法我知道,我的意思是能不能扩展site的功能
回复

使用道具 举报

发表于 2013-3-11 20:34:44 | 显示全部楼层
DFMT命令是阻塞式命令还是并行命令
就是不等待执行完毕就继续下一个命令
回复

使用道具 举报

发表于 2013-3-11 20:37:05 | 显示全部楼层
应该是阻塞式命令吧!
DFMT命令能增加个进度条吗

[ 本帖最后由 2011hwo1 于 2013-3-11 20:40 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-11 21:16:36 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-11 20:37 发表
应该是阻塞式命令吧!
DFMT命令能增加个进度条吗

是阻塞式命令.


DFMT命令能增加个进度条吗?
A:
调用MS的 进度条吧。

[ 本帖最后由 mdyblog 于 2013-3-12 00:06 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-12 00:22:28 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-11 19:43 发表

这种方法我知道,我的意思是能不能扩展site的功能


PECMD2012.1.75.1-130311-1.多窗口线程孵化版_win32_64.sfx:

1:
FORX ,
※命令为空时,变量返回个(次)数。

FORX  d:\*.*,&&V,0,  
MESS  【%&V%】个   // 【12】个

2:CALL
┃ **qd必须要前导,#整数,*PE变量名,$字符串。**qd#/**qd*/**qd$参数全为整数/PE变量名/字符串。  ┃
用 **qd# ,则BEEP 可以省掉2个#

ENVI &&&ALIAS *opt Beep=CALL $**qd# **ret:* Kernel32.dll,Beep,    //已内置
Beeep ,1750,1300   //#不需要了



3. sprintf 格式化输出   

ENVI &&&Alias *opt sprintf=CALL $**c **qd **ret:* user32.dll,wsprintfW, //已内置
ENVI &&&EnviMode=1
SET$  &B= 0x0 *4096 -  //输出buffer, 4096
sprintf ,*B,%%09d,#1
SET &fmt=%%09d
sprintf ,*B,*fmt,#1  //或
MESS B=【%&B%】  //B=【000000001】

[ 本帖最后由 mdyblog 于 2013-3-12 00:48 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-12 11:29:53 | 显示全部楼层
原帖由 clonecd 于 2013-3-12 09:32 发表
LABE中关于\n的问题:#code=936

_SUB AAAAA,W300H180,测试回车符显示,,,
    LABE. -left advLABE,L18T30W200H33,dd:\n\哈哈哈阿道夫,,0xFF0000,
    ITEM DOIT1,L20T80W70H28,改 变,CALL ChangeText,
   ...
   ENVI @advLABE=%&DD%

改为
ENVI. @advLABE=%&DD%
ENVI 后面有个点。
HELP ENVI
"."表示\n转换为换行,如果是控件为禁止换行。
回复

使用道具 举报

 楼主| 发表于 2013-3-12 12:15:02 | 显示全部楼层

PECMD2012.1.75.1-130312-1.多窗口线程孵化版_win32_64

PECMD2012.1.75.1-130312-1.多窗口线程孵化版_win32_64.sfx.zip:

1:PE对象制作和提取
┃ENVI-数据类型  PE变量名=数值[:偏移字节数]     //在PE对象中制作指定类型的2进制数据。     ┃
┃ENVI?数据类型  源PE变量名=变量名[:偏移字节数]   //提取PE对象中指定类型的2进制数据。     ┃
┃//数据类型:char wchar short int long longlong int64 float double longdouble ptr(指针)      ┃

主要是给DLL API用的,他们很多时候操作的是一个对象。(没有对象时,制作时自动创建)
PE对象制作和提取.wcs(包内有):

#code=936
ENVI &&&FORCELOCAL=1
ENVI &&&EnviMode=1


ENVI off=2
SET-long &B=0x42:%off%  //'B'
SET-longlong &B=0x43:4  //'C'
SET-ptr  &B=32:10

SET-wchar &B=0x41       //'A'
SET?ptr  &B=&B2:10

ENVI-addr  &&pB,&&sB=&B
MESS pB=%&pB% szB=%&sB%  B【%&B%】  B2【%&B2%】
//PECMD32//pB=0x0161F780 szB=14  B【ABC】  B2【0x00000020】
//PECMD64//pB=0x00000000065E6AD8 szB=18  B【ABC】  B2【0x0000000000000020】  





2: EXIT  CONTINUE
继续下一轮循环。 (实际是EXIT BLOCK )

LOOP #1=1,
{
      CODE——A
      EXIT CONTINUE   //或EXIT BLOCK 或 EXIT -
      CODE——B
//END_BLOCK
}
上面 【EXIT CONTINUE //或EXIT BLOCK 或 EXIT -】就是直接跳到END_BLOCK(就是恰好}前面)继续执行。

[ 本帖最后由 mdyblog 于 2013-3-12 12:42 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-12 12:42:49 | 显示全部楼层

回复 #5115 clonecd 的帖子

是的                         
回复

使用道具 举报

 楼主| 发表于 2013-3-12 13:52:15 | 显示全部楼层
原帖由 mdyblog 于 2013-3-12 12:15 发表
PECMD2012.1.75.1-130312-1.多窗口线程孵化版_win32_64.sfx.zip:

1:PE对象制作和提取
┃ENVI-数据类型  PE变量名=数值[:偏移字节数]     //在PE对象中制作指定类型的2进制数据。     ┃
┃ENVI?数据 ...



3: EXIT BREAK  
退出当前 FORX 或 LOOP 循环。
实际就是 EXIT LOOP 或EXIT FORX

对于应 C/C++ 的 break .
LOOP  #1=1,
{
   CODE_A
   EXIT  BREAK
   CODE_B
}
//OUT_BLOCK
上面就是直接跳到 OUT_BLOCK (正好}之后)

CONTINUE_BREAK.wcs(保内有):
#code=936
ENVI &&&FORCELOCAL=1
ENVI &&&EnviMode=1

SET &I=0
LOOP #%I%<3,
{
    CALC &I=%I% + 1
    MESS break_aaa_%I%
    EXIT break  
    MESS break_bbb_%I%
}
MESS  break_END

ENVI I=0
LOOP #%I%<3,
{
    CALC I=%I% + 1
    MESS continue_aaa_%I%
    EXIT continue
    MESS continue_bbb_%I%
}
MESS  break_END  




[ 本帖最后由 mdyblog 于 2013-3-12 14:19 编辑 ]
回复

使用道具 举报

发表于 2013-3-12 20:52:19 | 显示全部楼层
LOOP #1=1, 的写法可否简化一下啊,比如不带任何参数就是无条件循环。

另外,现在貌似还没有批处理里的 goto 类似的功能吧?不过貌似这个也没多大必要,只是在批处理里面经常用 goto 配合 errorlevel 来实现 C 的 switch 的功能,现在是用一串 IFEX 或者一串 FIND 来实现的,不知道有没有更简单的方法。



话说 PECMD.EXE 的体积见长啊,PECMD2012.1.75.1-130312-1.多窗口线程孵化版_win32_64.sfx 这个里面的 PECMD.EXE 没有压缩哦,700+k

[ 本帖最后由 2010qaqz111 于 2013-3-12 20:53 编辑 ]
回复

使用道具 举报

发表于 2013-3-12 21:03:28 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-12 20:52 发表
LOOP #1=1, 的写法可否简化一下啊,比如不带任何参数就是无条件循环。

另外,现在貌似还没有批处理里的 goto 类似的功能吧?不过貌似这个也没多大必要,只是在批处理里面经常用 goto 配合 errorlevel 来实现 ...

用upx可以压缩  upx -9 pecmd.exe就可以了
楼主肯定是忘记压缩了
回复

使用道具 举报

发表于 2013-3-12 21:08:15 | 显示全部楼层
貌似 call +   exit 可以代替goto
回复

使用道具 举报

发表于 2013-3-12 21:19:40 | 显示全部楼层
貌似现在pecmd的envi出错了,有些envi命令会直接退出脚本
不知道哪儿改错了
回复

使用道具 举报

发表于 2013-3-12 21:21:14 | 显示全部楼层
不会是我系统出错了吗
回复

使用道具 举报

 楼主| 发表于 2013-3-12 21:47:05 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-12 21:08 发表
貌似 call +   exit 可以代替goto

标准一点的语言,总在尽力避免不的不使用goto。 而用结构化编程。
你说的 【call +   exit 可以代替goto】怎么实现?
回复

使用道具 举报

 楼主| 发表于 2013-3-12 21:49:06 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-12 21:19 发表
貌似现在pecmd的envi出错了,有些envi命令会直接退出脚本
不知道哪儿改错了

用  LOGS *D:\X.log 看看在哪儿退出的。 在写一个10行作用的测试贴上来吧。
回复

使用道具 举报

发表于 2013-3-12 22:03:09 | 显示全部楼层
logs *D:\X.log
call 检查数字名 fsw
_SUB 检查数字名
forx /o:-n D:\fzservic\feidat\BAK\%1\*.%1,a0,0,team 查询文件时间 %a0%|envi b=%b%\n%aa2%
mess %b%
_END

_SUB 查询文件时间
SITE ?-local ,aa=FTIME,%1
MSTR aa1,aa2,aa3,aa4,aa5,aa6=<1*>%aa%
envi aa2=%aa1%%aa2%%aa3%%aa4%%aa5%%aa6%
envi a=%a%%aa2%
_END

x.log

[LOGS *D:\X.log]        <0>:操作成功完成。
[SITE ?-local ,aa=FTIME,D:\fzservic\feidat\BAK\fsw\20130312205956.fsw]        <0>:操作成功完成。
[MSTR aa1,aa2,aa3,aa4,aa5,aa6=<1*>2013 03 12 20 59 56 133 2]        <0>:操作成功完成。
[envi aa2=20130312205956]        <0>:操作成功完成。
奇怪的是用PECMDEDIT编辑这个脚本后按F5将运行时PECMDEDIT居然退出,是我电脑的问题还是pemcdedit的问题?

[ 本帖最后由 2011hwo1 于 2013-3-12 22:15 编辑 ]
回复

使用道具 举报

发表于 2013-3-12 22:06:38 | 显示全部楼层
goto 一般是跳到指定的行标号去,goto下面的却不执行
在一个函数里面    而如果使用call 到一个函数就相当于是跳到指定的行标号了,但是会继续进行下面的,然后在后面加个exit后面的就不执行了
回复

使用道具 举报

发表于 2013-3-12 22:08:44 | 显示全部楼层
其实call 加个参数就相当于goto了,就是call后不返回到发生call命令的下一个语句就行了
行号就相当于一个_sub函数名,只不过goto是不带参数的,call是可以带参数的

[ 本帖最后由 2011hwo1 于 2013-3-12 22:11 编辑 ]
回复

使用道具 举报

发表于 2013-3-12 22:22:07 | 显示全部楼层
不一样,call 涉及堆栈处理,goto 是平级跳转。

goto 一般尽量避免使用,会使代码很难读,我是在bat里面配合errorlevel做switch用的,在bat里面这种用法遍地都是,这也是限于bat的流程逻辑不完善的原因,属于历史遗留问题。

Win系统一直缺少一个方便好用的脚本解释器,不像linux下面一堆脚本可以选,PECMD现在有这个趋势,单文件解释脚本,轻量级,前途一片光明啊。

[ 本帖最后由 2010qaqz111 于 2013-3-12 22:24 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-12 22:22:28 | 显示全部楼层
原帖由 2011hwo1 于 2013-3-12 22:03 发表
logs *D:\X.log
call 检查数字名 fsw
_SUB 检查数字名
forx /o:-n D:\fzservic\feidat\BAK\%1\*.%1,a0,0,team 查询文件时间 %a0%|envi b=%b%\n%aa2%
mess %b%
_END

_SUB 查询文件时间
SITE ?-local ,a ...

ENVI &&&EnviMode=1
ENVI &&&FORCELOCAL=1

TEAM SET &b=| SET &a0=| SET &aa=| SET &aa1=| SET &aa2=| SET &aa3=| SET &aa4=| SET &aa5=| SET &aa6=
call 检查数字名 fsw
_SUB 检查数字名
    forx /o:-n D:\fzservic\feidat\BAK\%1\*.%1,a0,0,team 查询文件时间 %a0%|envi b=%b%\n%aa2%
    mess %b%
_END

_SUB 查询文件时间
    SITE ?-local ,aa=FTIME,%1
    MSTR aa1,aa2,aa3,aa4,aa5,aa6=<1*>%aa%
    envi aa2=%aa1%%aa2%%aa3%%aa4%%aa5%%aa6%
    envi a=%a%%aa2%
_END

/////////////
ENVI &&&FORCELOCAL=1
不想加。

ENVI &&&FORCELOCAL=1
一定要加。 不然出现奇怪的 灵异 哦!!!!

用4.0 试试下面的脚本
TEST_ENVIMODE.WCS:
// ENVI  &&&EnviMode=1
ENVI ABC=%ABC%
MESS  %ABC% @ #OK



[ 本帖最后由 mdyblog 于 2013-3-12 22:33 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-12 22:24:15 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-12 22:22 发表
不一样,call 涉及堆栈处理,goto 是平级跳转。

goto 一般尽量避免使用,会使代码很难读,我前面也说了是在bat里面配合errorlevel做switch用的。

顶盖!               
回复

使用道具 举报

发表于 2013-3-12 22:33:19 | 显示全部楼层
我那段代码是因为envi a=%a%%aa2%出错而退出的,就是因为变量a没有赋值引起的,这应该是envi的问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-10 11:06

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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