|
本帖最后由 9001 于 2020-5-18 14:54 编辑
因为PECMD常用的命令都是看pecmd.ini、petool.ini、pesoft.ini之类的配置文件知道其大致用法。但大量的用法需要查帮助文件。自带的帮助显然很不全面,所以看5大的代码就一头雾水。
是我用的PECMD为精简版,里面带的帮助文件也被阉割了。如果要学习PECMD用法,请使用完整版的PECMD。或者下载这个帮助文件:
HELP0.TXT
(391.84 KB, 下载次数: 8)
我查询帮助,试着学习5大的代码,顺便请5大解释答疑
估计有人愿意跟着5大学习学习。
//我看5大程序经常这样代码开头,有什么作用?答:设置语言代码,简繁自适应。
#code=936T950
//下面这两句设置PE模式与变量继承,是否影响了PE加载启动shell?答:其它脚本变量会相互影响,使用exec -incmd pecmd load "%curdir%\flash.wcs"另开一个干净的进程加载,没有乱七八糟的问题。
ENVI^ EnviMode=1
ENVI^ ForceLocal=1
// FILE命令帮助中没有-force参数,是强制删除
FILE -force "%&CurDir%\1.txt"
//@前导调用子过程窗口
CALL @autoWALL
//窗口名后面这个#是什么意思?答:#表示隐藏窗口。
_SUB autoWALL,#
//定时器清零初始化,准备调用计算随机数子过程CalcRand
//加个&前导标志起什么作用?答:&表示pe变量,与cmd的环境变量有区别,加&更高级,b格更高
//周期数值大于0表示定时器即刻工作,数值为0时表示定时器暂停工作。
TIME &Timer,0, CALL CalcRand
//LIST命令在_SUB定义的窗口内建立一个下拉列表框
//在屏幕左上角建立一个下拉表框,缩小为一个点,隐藏
//可否R0T0W0H0在右上角搞一隐藏点?
LIST &NumCount,L0T0W0H0,,,,0x10
//调用生成随机数子过程
CALL CalcRand
_END
_SUB CalcRand
//"@"表示设置窗口控件的名称
ENVI @&Timer=0
//热键F1,--del是清除什么的?清除F1热键定义
HKEY$ #112, --del
//设置两个变量?答:NumCount.Query确定下拉列表存放20个数据
//Total开始没赋值?所以还是一样赋值20?
ENVI @&NumCount.Query=20;&Total
//这个判断说明Total被赋值了
IFEX $%&Total%>0,
{
//计数20次之后将 NumCount列表中的数据清空重来
ENVI @&NumCount.Val=
//PUTF命令产生CurDir%\1.txt这个空文件,暂无数据。
//PUTF -dd -len=0 "%&CurDir%\1.txt",0,zero
}
//前导符'#'表示进行整数变量比较,提高效率;'$'表示进行字符串变量比较(不区分大小写)
//首次运行直接进入循环
//Loop循环的意义,在于判断如果产生了已经产生过的随机数,那么就继续循环,直到产生未记录的随机数。
LOOP #1=1,
{*
//CALC命令中,前导"#" 表示所有变量按 int64 型数据来处理,省略或$表示按double型数据来处理
//产生0-19随机整数RandNum
CALC #&RandNum=RAND(20)
//随机数自加1,是为了最后生成的随机为1-20
CALC #&RandNum=%&RandNum%+1
//产生的这个随机数暂存于NumCount.SEL当前计数列表中
ENVI @&NumCount.SEL=%&RandNum%
//<>为不等于。首次运行NumCount中未记录这个随机数,要进入判断体进行添加记录。
IFEX $%&RandNum%<>%&NumCount%,
{
//产生随机数添加到NumCount列表
ENVI @&NumCount.ADD=%&RandNum%
//切换一次壁纸
WALL %&CurDir%\Logo%&RandNum%.jpg
//记录这个随机数到当前目录下1.txt中,完毕换行
//WRIT "%&CurDir%\1.txt",$+0,%&RandNum%
//设置定时长度,1秒为1000。此处为30分钟1800000
ENVI @&Timer=1800000
//重新设置热键F1,定时器长度为1。用于按下F1后立即结束定时
HKEY$ #112, ENVI @&Timer=1
EXIT
}
}
_END
主要问题有4个:
1、NumCount.SEL NumCount.ADD NumCount.Query NumCount.Val与NumCount的关系是怎样的。
5大提示,查阅完整版帮助,可知道前面4个都是针对NumCount进行操作的。
- ※ENVI @下拉列表框名称.QUERY=行号
- ※ENVI @下拉列表框名称.ADD=新增加的条目
- ※ENVI @下拉列表框名称.SEL=选择的条目
- ※ENVI @下拉列表框名称.VAL=重置多个新增加的条目 //|分隔 ;原来的被清除
复制代码
2、计时器窗口在计时结束后是否没有自动消失?即它仍然存在,只是归零暂停?
- TIME &Timer,0, CALL CalcRand
- LIST &NumCount,L0T0W0H0,,,,0x10
- CALL CalcRand
复制代码 上面这段前两句是不是计时窗口放在那里,等待调用CalcRand?
而第三句才是在其本身的过程体中启动了计时器,这样理解对吗?
3、EXIT是跳出了Loop循环,转而回到子过程CalcRand结束,但由于计时器的存在,1800000=30分钟的周期数值>0,计时器又开始工作:第二、三...N次调用CalcRand。我的问题是,这30分钟的周期是怎么耗尽的?按TIME的语法,貌似设置了1800000后就开始计算随机数,它这个用时很少就完成了计算成换屏,然后就是重新设置计数时间。这期间应该耗时很短,这点令人费解。
4、怎么没看到Total后续运算?它是每次-1计数?减到0的时候NumCount.Val清空,重新添加新的随机数?
|
|