无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: mdyblog
打印 上一主题 下一主题

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

    [复制链接]
4771#
 楼主| 发表于 2013-3-10 23:57:37 | 只看该作者
原帖由 2011hwo1 于 2013-3-10 22:07 发表
定时任务如果是一分钟的任务能在整分钟执行,任务在是6分钟的话任务只能在59秒执行,误差近1秒,是怎么回事


你是 和MS 的始终对比的吧?   就是桌面右下角的,或从这里点出来的。
MS这个不准的, 精度只有1秒。 误差1秒。
需要秒表,来比。



在 程序中加一个秒表,来看看。 【_SUB &WORK】的最末尾。
    LABE &LBTIME,L31T379W231H30,,,
    TIME &秒表 ,100,  TEAM DATE *space0 &&tm| ENVI @&LBTIME=%tm%  //调试秒表。看秒的变化。


5003#楼 已更新。 以毫秒计算。

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

使用道具 举报

4772#
 楼主| 发表于 2013-3-11 00:51:41 | 只看该作者

判断当前系统是X86还是X64

判断当前系统是X86还是X64

CALL $? **ret:* kernel32.dll,Wow64DisableWow64FsRedirection, &&p
IFEX $%&p%=0, MESS X86  %&p%! MESS  X64 %&p%

回复

使用道具 举报

4773#
发表于 2013-3-11 08:10:46 | 只看该作者

回复 #5087 mdyblog 的帖子

File 命令好像有点问题:

@echo off
Pecmd.exe file %~f0=>%~dpn0_1%~x0
exit

得到的是个空文件,零字节
回复

使用道具 举报

4774#
发表于 2013-3-11 08:48:30 | 只看该作者
原帖由 527104427 于 2013-3-11 08:10 发表
File 命令好像有点问题:

@echo off
Pecmd.exe file %~f0=>%~dpn0_1%~x0
exit

得到的是个空文件,零字节

是你的命令有问题,>应该写成^>

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

使用道具 举报

4775#
发表于 2013-3-11 09:00:03 | 只看该作者
批处理文件文件路径名和文件名包含了空格吗,如果包含的话会出错
回复

使用道具 举报

4776#
发表于 2013-3-11 09:04:18 | 只看该作者
原帖由 527104427 于 2013-3-11 08:10 发表
File 命令好像有点问题:

@echo off
Pecmd.exe file %~f0=>%~dpn0_1%~x0
exit

得到的是个空文件,零字节

命令错误!,应该是:


@echo off
Pecmd.exe file %~f0=^>%~dpn0_1%~x0
exit
回复

使用道具 举报

4777#
发表于 2013-3-11 09:07:17 | 只看该作者

回复 #5089 2011hwo1 的帖子

%~f0是路径名?
你先试试再说
回复

使用道具 举报

4778#
发表于 2013-3-11 09:08:36 | 只看该作者

回复 #5091 2011hwo1 的帖子

多谢,下午回去试试!
回复

使用道具 举报

4779#
发表于 2013-3-11 09:59:44 | 只看该作者
原帖由 mdyblog 于 2013-3-10 23:57 发表


你是 和MS 的始终对比的吧?   就是桌面右下角的,或从这里点出来的。
MS这个不准的, 精度只有1秒。 误差1秒。
需要秒表,来比。



在 程序中加一个秒表,来看看。 【_SUB &WORK】的最末尾。
     ...

结果测试,是原来的定时器精度不够,我load 一个显示当前时间的脚本执行6分钟任务时应该在整分钟执行的任务显示的时间在59秒多就执行了
现在这个执行后显示的是整分钟后7毫秒左右执行的,这个就正常了
回复

使用道具 举报

4780#
 楼主| 发表于 2013-3-11 10:07:08 | 只看该作者
原帖由 527104427 于 2013-3-11 08:10 发表
File 命令好像有点问题:
@echo off
Pecmd.exe file %~f0=>%~dpn0_1%~x0
exit
得到的是个空文件,零字节
=^>   "a  b.cmd":
dir "%~dpn0_1%~x0" | FIND "."
Pecmd.exe file %~f0=^>%~dpn0_1%~x0
dir "%~dpn0_1%~x0" | FIND "."
a__b.cmd.zip (179 Bytes, 下载次数: 7)


或者用引号 "a b2.cmd":

dir "%~dpn0_1%~x0" | FIND "."
Pecmd.exe "file %~f0=>%~dpn0_1%~x0"
dir "%~dpn0_1%~x0" | FIND "."
a b2.cmd.zip (181 Bytes, 下载次数: 7)




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

使用道具 举报

4781#
 楼主| 发表于 2013-3-11 12:00:19 | 只看该作者

响铃函数Beep(笔记本也可用的)

响铃函数Beep(笔记本也可用的)
ENVI &&&ALIAS *opt Beep=CALL $**ret:* Kernel32.dll,Beep,

Beep ,#750,#300  //Beep &ret,#750,#300
750是频率Hz
300是持续时间ms
回复

使用道具 举报

4782#
发表于 2013-3-11 15:16:21 | 只看该作者
回复 #5091 2011hwo1 的帖子

回复 #5095 mdyblog 的帖子

多谢两位,可以了
回复

使用道具 举报

4783#
发表于 2013-3-11 17:09:47 | 只看该作者
ENVI &&&ALIAS *opt Beep=CALL $**ret:* Kernel32.dll,Beep,
Beep ,#750,#300  //Beep &ret,#750,#300
是这样用吗?怎么没有声音出现啊?

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

使用道具 举报

4784#
 楼主| 发表于 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 编辑 ]
回复

使用道具 举报

4785#
 楼主| 发表于 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能增加返回文件个数功能吗?

什么文件个数?
回复

使用道具 举报

4786#
 楼主| 发表于 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, 下载次数: 10

回复

使用道具 举报

4787#
发表于 2013-3-11 18:47:13 | 只看该作者
比如文件夹里面所有文件的个数    文件夹里面匹配条件的文件个数像d:\a\*.exe这样的文件的个数
回复

使用道具 举报

4788#
发表于 2013-3-11 18:50:42 | 只看该作者
好像没有安装蜂鸣器
回复

使用道具 举报

4789#
 楼主| 发表于 2013-3-11 19:02:07 | 只看该作者
原帖由 2011hwo1 于 2013-3-11 18:50 发表
好像没有安装蜂鸣器

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


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

使用道具 举报

4790#
 楼主| 发表于 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%
回复

使用道具 举报

4791#
发表于 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的功能
回复

使用道具 举报

4792#
发表于 2013-3-11 20:34:44 | 只看该作者
DFMT命令是阻塞式命令还是并行命令
就是不等待执行完毕就继续下一个命令
回复

使用道具 举报

4793#
发表于 2013-3-11 20:37:05 | 只看该作者
应该是阻塞式命令吧!
DFMT命令能增加个进度条吗

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

使用道具 举报

4794#
 楼主| 发表于 2013-3-11 21:16:36 | 只看该作者
原帖由 2011hwo1 于 2013-3-11 20:37 发表
应该是阻塞式命令吧!
DFMT命令能增加个进度条吗

是阻塞式命令.


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

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

使用道具 举报

4795#
 楼主| 发表于 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 编辑 ]
回复

使用道具 举报

4796#
 楼主| 发表于 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转换为换行,如果是控件为禁止换行。
回复

使用道具 举报

4797#
 楼主| 发表于 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 编辑 ]
回复

使用道具 举报

4798#
 楼主| 发表于 2013-3-12 12:42:49 | 只看该作者

回复 #5115 clonecd 的帖子

是的                         
回复

使用道具 举报

4799#
 楼主| 发表于 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 编辑 ]
回复

使用道具 举报

4800#
发表于 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 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-28 06:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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