无忧启动论坛

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

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

    [复制链接]
5161#
发表于 2013-4-4 00:29:07 | 只看该作者

回复 #5500 mdyblog 的帖子

成功了,多谢老大,PECMD太强大了,可以实现CMD无法实现的功能,再一次表示感谢
回复

使用道具 举报

5162#
发表于 2013-4-4 07:38:03 | 只看该作者
消息号以#开头为PECMD应用自定义消息1-N。wPrm lPrm参数名, 参数名可以被引用。等号后的_表示下半部响应模式,在系统响应之后响应【对衍生消息会以相反的顺序响应】。 上面;可以用逗号。      消息参数可以是数字,@PE变量名(ENVI$# 填充非字符串对象),$字符串(只SENDMSG)。

字符串消息参数怎么使用?
回复

使用道具 举报

5163#
发表于 2013-4-4 09:01:10 | 只看该作者
PINT XXX,StartMenu 命令对 Win8PE 不起作用吗?无法将快捷方式添加到开始菜单的列表?
回复

使用道具 举报

5164#
 楼主| 发表于 2013-4-4 09:52:58 | 只看该作者
原帖由 2010qaqz111 于 2013-4-4 09:01 发表
PINT XXX,StartMenu 命令对 Win8PE 不起作用吗?无法将快捷方式添加到开始菜单的列表?

WIN8 没有开始菜单。
都是自己 弄的, 没有 统一的标准, 也没有好的接口。
4.0 也没办法。

[ 本帖最后由 mdyblog 于 2013-4-4 11:23 编辑 ]
回复

使用道具 举报

5165#
发表于 2013-4-4 10:06:29 | 只看该作者
原帖由 <i>mdyblog</i> 于 2013-4-4 09:52 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2737616&ptid=205402" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />

<br />
WIN8 没有开始菜单。 <br />
都是自己 弄的, 没有 统一的标准, 也没有好的借口。 <br />
4.0 也没办法。
<br />
那就没办法了,手动吧。晕死了。

PS.话说为毛用chrome上论坛引用就出一堆乱码,什么时候论坛能改进一下支持chrome啊-_-b
回复

使用道具 举报

5166#
发表于 2013-4-4 10:46:48 | 只看该作者
原帖由 2010qaqz111 于 2013-4-4 10:06 发表

那就没办法了,手动吧。晕死了。

PS.话说为毛用chrome上论坛引用就出一堆乱码,什么时候论坛能改进一下支持chrome啊-_-b

点控制面板  编辑个人资料   编辑器模式 修改下

1.JPG (8.66 KB, 下载次数: 141)

1.JPG
回复

使用道具 举报

5167#
 楼主| 发表于 2013-4-4 10:53:51 | 只看该作者
原帖由 2011hwo1 于 2013-4-4 07:38 发表
消息号以#开头为PECMD应用自定义消息1-N。wPrm lPrm参数名, 参数名可以被引用。等号后的_表示下半部响应模式,在系统响应之后响应【对衍生消息会以相反的顺序响应】。 上面;可以用逗号。      消息参数可以是数 ...


发送字符串消息.WCS(包内有):
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1

WIN1
_SUB WIN1,W289H249,新窗口1,
    SET-def  WID=%__WinID%
    ENVI @this.MSG=#1::&&wp,&&lp, CALL OnMSG1  
    SET &str[1]=Line2222--A  //共享变量数组
    SET &str[2]=abc22222--A  //共享变量数组
    ENVI @this.SENDMSG=#1;1;2      //方法1.1  一般建议方法1.X,利用共享变量
    ENVI @this.POSTMSG=#1;1;2      //方法1.1
    ENVI @@SENDMSG=%WID%:#1;1;2    //方法1.3
    ENVI @@POSTMSG=%WID%:#1;1;2    //方法1.4

    SET &str1=Line2222--B
    SET &str2=abc22222--B

    ENVI @this.MSG=#2::&&wp,&&lp, CALL OnMSG2  
    ENVI @@SENDMSG=%WID%:#2;@str1;@str2                //方法2.2   没写好容易 崩溃的!!!! 一般只用SENDMSG
    ENVI @@SENDMSG=%&WID%:#2;$Line1111--B;$abc111--B   //方法3.2  .没写好容易 崩溃的!!!! 只能SENDMSG

/////////////////
    ENVI @this.SENDMSG=#2;@str1;@str2                  //方法2.1 .没写好容易 崩溃的!!!! 一般只用SENDMSG
   
ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B      //方法3.1 .没写好容易 崩溃的!!!! 只能SENDMSG

_END

_SUB OnMSG1  
    SET~   &wpstr=str[%&wp%]    //取共享变量
    SET~   &lpstr=str[%&lp%]
    MESS. [%&wpstr%]  [%&lpstr%]
_END

_SUB OnMSG2  
    SET-make  &wpstr=%&wp%
    SET-make  &lpstr=%&lp%
    MESS. [%&wpstr%]  [%&lpstr%]
_END
  





[ 本帖最后由 mdyblog 于 2013-4-4 16:24 编辑 ]
回复

使用道具 举报

5168#
发表于 2013-4-4 16:30:02 | 只看该作者
原帖由 mdyblog 于 2013-4-4 10:53 发表


发送字符串消息.WCS(包内有):
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1

WIN1
_SUB WIN1,W289H249,新窗口1,
    SET-def  WID=%__WinID%
    ENVI @this.MSG=#1::&&wp,&&lp, CALL OnMSG1  
   ...

明白了,是ENVI @@SENDMSG=%WID%:#2;@str1;@str2传变量str1和str2的地址,然后用SET-make  &wpstr=%&wp%来取出来是吧.
或者ENVI @@SENDMSG=%&WID%:#2;$Line1111--B;$abc111--B传字符串Line1111--B和abc111--B的地址,然后用SET-make  &wpstr=%&wp%来取出来是.
ENVI @this.SENDMSG=#2;@str1;@str2
ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B 试了下无法传地址,所以这个命令失败.

也可以envi-addr &a=&str1来获得pe变量str1的地址,然后来传地址,这样就可以用多种消息发送命令来传址,然后envi-make来取字符串了
回复

使用道具 举报

5169#
发表于 2013-4-4 16:40:20 | 只看该作者
ENVI-make  PE变量名=[地址][;
  • [字节长度]]   //根据内存地址,长度 创建PE变量。*为char串
    我觉得应该改为:
    ENVI-make  PE变量名=[地址][;
  • [字节长度]]   //根据内存地址,长度返回字符串。*为char串
    这样比较准确

    [ 本帖最后由 2011hwo1 于 2013-4-4 16:41 编辑 ]
  • 回复

    使用道具 举报

    5170#
     楼主| 发表于 2013-4-4 16:48:35 | 只看该作者
    原帖由 2011hwo1 于 2013-4-4 16:30 发表

    明白了,是ENVI @@SENDMSG=%WID%:#2;@str1;@str2传变量str1和str2的地址,然后用SET-make  &wpstr=%&wp%来取出来是吧.
    或者ENVI @@SENDMSG=%&WID%:#2;$Line1111--B;$abc111--B传字符串Line1111--B和abc111--B的 ...

    是的。


    1. /////////////////
    2. ENVI @this.SENDMSG=#2;@str1;@str2 //方法2.1 .没写好容易 崩溃的!!!! 一般只用SENDMSG
    3. ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B //方法3.1 .没写好容易 崩溃的!!!! 只能SENDMSG
    复制代码

    这两个药最新版, 所以分隔了一下。
    回复

    使用道具 举报

    5171#
    发表于 2013-4-4 16:48:45 | 只看该作者
    原来字符串只能ENVI @@SENDMSG=参考号:消息号;[@pe变量名[$字符串]];[@pe变量名[$字符串]]
    来传址,用envi-make pe变量名=pe变量地址名来得到字符串
    回复

    使用道具 举报

    5172#
     楼主| 发表于 2013-4-4 16:59:10 | 只看该作者
    原帖由 2011hwo1 于 2013-4-4 16:40 发表
    ENVI-make  PE变量名=[地址][;[字节长度]]   //根据内存地址,长度 创建PE变量。*为char串
    我觉得应该改为:
    ENVI-make  PE变量名=[地址][;
    [字节长度]]   //根据内存地址,长度返回字符串。*为char串
    ...


    ENVI-make PE变量名= 地址; 字节长度   //根据内存地址,和长度  创建PE对象(含字符串)。
    ENVI-make PE变量名= 地址             //根据内存地址 创建PE字符串。 地址是一个以宽字符0结尾的宽字符串
    ENVI-make PE变量名= 地址;*           //根据内存地址 创建PE对象(ANSI字符串)。 地址是一个以ANSI字符0结尾的ANSI字符串

    是创建新PE对象,拷贝其内容。
    回复

    使用道具 举报

    5173#
    发表于 2013-4-4 17:00:22 | 只看该作者
    原帖由 mdyblog 于 2013-4-4 16:48 发表

    是的。

    /////////////////
    ENVI @this.SENDMSG=#2;@str1;@str2 //方法2.1 .没写好容易 崩溃的!!!! 一般只用SENDMSG
    ENVI @this.SENDMSG=#2;$Line1111--B;$abc111--B //方法3.1 .没写好容易 崩溃的! ...

    不错哈,又出新版了,哈哈,你简直是太勤奋了!!
    回复

    使用道具 举报

    5174#
     楼主| 发表于 2013-4-4 17:01:18 | 只看该作者
    原帖由 2011hwo1 于 2013-4-4 16:48 发表
    原来字符串只能ENVI @@SENDMSG=参考号:消息号;[@pe变量名[$字符串]];[@pe变量名[$字符串]]
    来传址,用envi-make pe变量名=pe变量地址名来得到字符串


    是的, WINDOWS 的消息机制, 传递的都是2个 整数(含地址)。 接收方 再进一步处理成其它数据。
    回复

    使用道具 举报

    5175#
     楼主| 发表于 2013-4-4 17:04:44 | 只看该作者
    原帖由 2011hwo1 于 2013-4-4 17:00 发表

    不错哈,又出新版了,哈哈,你简直是太勤奋了!!


    传递字符串, 除了方法1, 不要用POSTMSG。 否则程序容易崩溃(收到时数据已经无效)。
    如果用到LOCK, SENDMSG 前不能是加锁状态,否则程序容易死锁。

    [ 本帖最后由 mdyblog 于 2013-4-4 17:09 编辑 ]
    回复

    使用道具 举报

    5176#
     楼主| 发表于 2013-4-4 17:22:38 | 只看该作者
    原帖由 mdyblog 于 2013-4-4 17:04 发表
    传递字符串, 除了方法1, 不要用POSTMSG。 否则程序容易崩溃(收到时数据已经无效)。
    如果用到LOCK, SENDMSG 前不能是加锁状态,否则程序容易死锁。

    跨进程 传递数据 需要 WM_COPYDATA 消息:
    COPYDATASTRUCT cp;
    cp.dwData = 0;
    cp.cbData = length;       //字节数
    cp.lpData = (void*)data;  //内存首值
    ::SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cp);


    struct COPYDATASTRUCT
    {
       DWORD  dwData; //自定义数据
       DWORD  cbData; //字节数
       LPVOID lpData; //内存首值
    };

    回复

    使用道具 举报

    5177#
     楼主| 发表于 2013-4-4 20:50:30 | 只看该作者
    PECMD2012.1.75.1-130314-36.多窗口线程孵化版_win32_64.sfx
    增加 ENVI-mkdummy

    ┃ENVI-make  PE变量名=[地址][;*】[字节长度]]   //根据内存地址,长度 创建PE变量。*为char串 ┃
    ┃ENVI-mkdummy  PE变量名=[地址][;*】[字节数]] //同-make,但只利用原内存创建dummy对象,不能修改┃

    ENVI-mkdummy  和  ENVI-make 类似。 但是, 它不重新申请一段内存, 而是利用原有内存。Copy-On-Write 技术:修改时才拷贝。

    主要是为了大内存时提高效率, 不用大内存的拷贝。 一般不要用。
       一般, 大内存用共享变量; 小变量可以拷贝没效率问题。


    [ 本帖最后由 mdyblog 于 2013-4-4 23:31 编辑 ]
    回复

    使用道具 举报

    5178#
    发表于 2013-4-5 00:30:36 | 只看该作者
    lambda 函数能够换行吗?比如这样:

    TIME * TimerDetectWiFi,1000,[]{
       XXX
       XXXX
    }

    或者这样:
    lambda 函数能够换行吗?比如这样:

    TIME * TimerDetectWiFi,1000,[]
    {
       XXX
       XXXX
    }


    我用代码实际测试好像不行?

    另外定时器事件是阻塞的吗?
    回复

    使用道具 举报

    5179#
     楼主| 发表于 2013-4-5 01:01:50 | 只看该作者
    原帖由 2010qaqz111 于 2013-4-5 00:30 发表
    lambda 函数能够换行吗?比如这样:
    或者这样:
    lambda 函数能够换行吗?比如这样:
    我用代码实际测试好像不行?
    另外定时器事件是阻塞的吗?


    [] 11 bb cc dd ee {
       MESS 1: %*  @# OK
       MESS 2: %*  @# OK
    }
      



    哦! TIME  只能单行!!     TIME 不支持 lambda 函数体, 只支持 命令。

    { 必须在第一行。 LAMBDA 本来就是行式函数, 一般都在同一行。 同时, 用以确定 参数表的束  

    定时器事件是阻塞的.

    [ 本帖最后由 mdyblog 于 2013-4-5 01:16 编辑 ]
    回复

    使用道具 举报

    5180#
    发表于 2013-4-5 01:12:33 | 只看该作者
    控件后面指定响应事件的地方都只能单行是吗?那就单独弄个 _SUB 了。

    [ 本帖最后由 2010qaqz111 于 2013-4-5 01:14 编辑 ]
    回复

    使用道具 举报

    5181#
     楼主| 发表于 2013-4-5 01:18:11 | 只看该作者
    原帖由 2010qaqz111 于 2013-4-5 01:12 发表
    控件后面指定响应事件的地方都只能单行是吗?那就单独弄个 _SUB 了。


    是的 。  CALL OnTimer1 aa bb cc
    _SBU  OnTimer1
        XX
        YY
    _END

    还可以  TEAM 复合命令
    TEAM MESS 111| MESS 2222| CALC b=%b%+ 1

    [ 本帖最后由 mdyblog 于 2013-4-5 01:19 编辑 ]
    回复

    使用道具 举报

    5182#
    发表于 2013-4-5 01:21:34 | 只看该作者
    EXEC 在运行命令行程序的时候能够让它不加载 mui 的多语言数据吗?

    比如 netsh 命令,在中文win下面运行如果系统里有 netsh.exe.mui 的话就会输出中文的消息,这样不大方便脚本处理输出信息,不知道有没有办法让运行的时候不加载 mui 数据?
    回复

    使用道具 举报

    5183#
    发表于 2013-4-5 01:33:46 | 只看该作者
    放弃,直接调那几个API都不行,大概是不同进程的关系,改名掉.mui文件也不行,中文就中文吧。

    [ 本帖最后由 2010qaqz111 于 2013-4-5 02:11 编辑 ]
    回复

    使用道具 举报

    5184#
     楼主| 发表于 2013-4-5 01:42:18 | 只看该作者
    原帖由 2010qaqz111 于 2013-4-5 01:12 发表
    控件后面指定响应事件的地方都只能单行是吗?那就单独弄个 _SUB 了。



    PECMD2012.1.75.1-130314-37.多窗口线程孵化版_win32_64.sfx:

    控件后面指定响应事件的地方 支持 (单行) LAMBDA 。
    1. TIME -t:1 t1,10, [] 11 bb cc dd ee { TEAM MESS 1:%* @# OK| MESS 2:%* @# OK}
    复制代码
    回复

    使用道具 举报

    5185#
     楼主| 发表于 2013-4-5 02:43:11 | 只看该作者
    原帖由 2010qaqz111 于 2013-4-5 01:21 发表
    EXEC 在运行命令行程序的时候能够让它不加载 mui 的多语言数据吗?

    比如 netsh 命令,在中文win下面运行如果系统里有 netsh.exe.mui 的话就会输出中文的消息,这样不大方便脚本处理输出信息,不知道有没有办 ...


    LINUX 下  运行程序前 改变环境变量 LC_ALL=C 即可。 WINDOWS 没找打资料。
    回复

    使用道具 举报

    5186#
    发表于 2013-4-5 04:18:10 | 只看该作者
    原帖由 mdyblog 于 2013-4-5 01:42 发表
    PECMD2012.1.75.1-130314-37.多窗口线程孵化版_win32_64.sfx:

    控件后面指定响应事件的地方 支持 (单行) LAMBDA 。
    TIME -t:1 t1,10, [] 11 bb cc dd ee { TEAM MESS 1:%* @# OK| MESS 2:%* @# OK}  

    回报 :
    PECMD2012.1.75.1-130314-37.多窗口线程孵化版_win32_64.sfx

    在 pecmd 或 pecmdedit 执行 (Win7SP1 x86)
    TIME -t:1 t1,10, [] 11 bb cc dd ee { TEAM MESS 1:%* @# OK| MESS 2:%* @# OK}
    都没反应.
    回复

    使用道具 举报

    5187#
    发表于 2013-4-5 08:31:59 | 只看该作者
    DISP 命令支持多显示器吗?
    回复

    使用道具 举报

    5188#
    发表于 2013-4-5 09:54:01 | 只看该作者
    原帖由 clonecd 于 2013-4-5 09:31 发表
    mdyblog 老师:

      PE变量怎么脱掉最外一对引号?如:
    ENVI &&AA=" AKSK    NNMM  "
      脱掉变量&AA的最外一对引号。

    ENVI &&AA=" AKSK    NNMM  "
    []%&AA%{SET AA=%~1}
    回复

    使用道具 举报

    5189#
    发表于 2013-4-5 10:11:10 | 只看该作者
    原帖由 clonecd 于 2013-4-5 10:08 发表

    多谢指教。

    客气。
    这个 LAMBDA 函数很有用,特别是处理变量的一些零碎边角的时候,比如去引号,替换,拆零件之类的,一行就搞定了。
    回复

    使用道具 举报

    5190#
     楼主| 发表于 2013-4-5 10:27:29 | 只看该作者
    原帖由 nu852 于 2013-4-5 04:18 发表
    回报 :
    PECMD2012.1.75.1-130314-37.多窗口线程孵化版_win32_64.sfx
    在 pecmd 或 pecmdedit 执行 (Win7SP1 x86)
    TIME -t:1 t1,10, [] 11 bb cc dd ee { TEAM MESS 1:%* @# OK| MESS 2:%* @# OK}
    都没反应.

    要加 TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1


    PECMD2012.1.75.1-130314-38.多窗口线程孵化版_win32_64: 响应代码支持 多行。 用一个 共享变量。
    用一个 共享变量: 形式上是一行, 但响应代码实际解开就是多行。可以是[] 开始的LAMBDA多行,或{开始的代码段多行。
    多行定时器.WCS(包内有):
    TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
    WIN1
    _SUB WIN1,W289H249,LAMBDA、多行定时器,
        SET-def-raw. CMD2=[] 11 bb cc dd ee { MESS B1:%*@#OK \n
        \ MESS B2:%*@#OK \n
        \}

        SET-def-raw. CMD3={ MESS C1:----@#OK \n
        \ MESS C2:----@#OK \n
        \}
        TIME -t:1 t1,10,[] 11 bb cc dd ee { TEAM MESS A1:%* @# OK| MESS A2:%* @# OK}   //LAMBDA 定时器
        TIME -t:1 t2,10,%CMD2%    //LAMBDA多行定时器 ,
        TIME -t:1 t3,10,%CMD3%    //多行定时器
    _END
      
    回复

    使用道具 举报

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

    本版积分规则

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

    闽公网安备 35020302032614号

    GMT+8, 2025-7-27 07:50

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

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