无忧启动论坛

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

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

    [复制链接]
5191#
 楼主| 发表于 2013-4-5 10:30:46 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 10:11 发表
客气。
这个 LAMBDA 函数很有用,特别是处理变量的一些零碎边角的时候,比如去引号,替换,拆零件之类的,一行就搞定了。


LAMBDA 函数 的设计初衷就是这样, 又称行式函数。 免得另外一个地方去又写一个零碎的函数。
回复

使用道具 举报

5192#
发表于 2013-4-5 11:23:28 | 只看该作者
DISP 能够指定某个显示器来设置分辨率吗?

另外设置分辨率之后可否延迟生效?即只写注册表不立即应用。

因为在加载显卡驱动之前预先设置分辨率然后加载显卡驱动完成后会自动重设分辨率等,这时候屏幕会闪一下,只写注册表不立即应用可以避免屏幕多闪一次,本来在 SHEL explorer 的时候就又会闪一下的(这个地方怎么避免屏幕闪烁?)。现在用的方法是在 DEVI 显卡驱动之前导入注册表来做的,这样比较死板,当然也能用就是,只不过这种方法就不惧通用性了。
回复

使用道具 举报

5193#
发表于 2013-4-5 11:58:38 | 只看该作者
LOGS 和 EXEC --logs --clone 能否自动产生和继承一个 %LogFile% 的变量?

fork 子进程的时候不好确定 log 应该放在哪,在 EXEC --logs --clone 的内存配置文件里面没有手工设定 LOGS 也不能跨进程继承最早有记录 LOGS 文件路径的顶级配置文件的变量,再 EXEC --logs --clone 第三级子进程的时候就不知道 LOG 文件应该放在哪了。现在都是用的硬编码,效果不太好。
回复

使用道具 举报

5194#
 楼主| 发表于 2013-4-5 12:00:59 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 10:11 发表


PECMD2012.1.75.1-130314-39.多窗口线程孵化版_win32_64.sfx: 不强调 窗口环境和非窗口环境。
下面代码 , 非窗口中也可以 开定时器, 注册消息。
非窗口控件操作.WCS:
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
ENVI @this.MSG=#2::&&wp,&&lp, MESS  OnMSG2  
ENVI @this.SENDMSG=#2;     
TIME -t:1 t1,1, [] 11 bb cc dd ee { TEAM MESS A1:%* @# OK| MESS A2:%* @# OK}   //LAMBDA 定时器
WAIT 100  //等定时器1ms启动后再退出   


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

使用道具 举报

5195#
 楼主| 发表于 2013-4-5 12:03:49 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 11:23 发表
DISP 能够指定某个显示器来设置分辨率吗?
另外设置分辨率之后可否延迟生效?即只写注册表不立即应用。
因为在加载显卡驱动之前预先设置分辨率然后加载显卡驱动完成后会自动重设分辨率等,这时候屏幕会闪 ...

1: 没有多显示器环境, 不知怎么调试哦!?
2: 即只写注册表不立即应用。
这个可以的。
回复

使用道具 举报

5196#
发表于 2013-4-5 12:15:37 | 只看该作者
如果是笔记本的话接一个外置可以,台式的话是比较麻烦,没有环境调试那就没办法了,还是搞注册表得了=。=
回复

使用道具 举报

5197#
 楼主| 发表于 2013-4-5 13:01:16 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 11:58 发表
LOGS 和 EXEC --logs --clone 能否自动产生和继承一个 %LogFile% 的变量?
fork 子进程的时候不好确定 log 应该放在哪,在 EXEC --logs --clone 的内存配置文件里面没有手工设定 LOGS 也不能跨进程继承最早有 ...


1: FORK 能继承 环境变量的。
FORK 前修改  “环境变量”(不是PE变量) ENVI  LogFile=log-2.log
FORK 的 脚本中 LOGS *%LogFile%

LogFile 可以自己加 吧。

2: EXEC --logs:[?]
LOGS文件 --clone
可以指定一个log文件。

可以用 %%__PID%% 按子进程ID来生成不同的LOG

logs_test.WCS:
LOGS * aa-main-%__PID%%.log

TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
SET-def CMD1=MESS 111

EXEC --logs:?*aa-%%__PID%%.log --clone:&CMD1   a bb cc   


3: 至于位置。 别太计较了。 LOGS  正常情况不用。 随便哪儿都行, 如D:\ ,当前目录。
  1. 3032 74367227765273.684 [ENTER:D:\MDY\DESKTOP\logs_test.WCS]
  2. 3032 74367228848697.303 [LOGS * aa-main-4128.log] <0> :操作成功完成。
  3. 3032 74367228973639.071 [ENVI^ ENVIMODE=1] <0> :操作成功完成。
  4. 3032 74367229029862.867 [ENVI^ FORCELOCAL=1] <0> :操作成功完成。
  5. 3032 74367229068237.839 [TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1] <0> :操作成功完成。
  6. 3032 74367229182916.533 [SET-def CMD1=MESS 111] <0> :操作成功完成。
  7. 3032 74367237919023.455 [EXEC --logs:?*aa-%__PID%.log --clone:&CMD1   a bb cc] <0> :操作成功完成。
  8. 3032 74367238798970.479 [LEAVE:D:\MDY\DESKTOP\logs_test.WCS]
  9. 3032 74367239033236.295 [LEAVE:]
复制代码

  1. 3012 74367275705876.368 [ENTER:D:\MDY\DESKTOP\*map:268:18]
  2. 3012 74367276383239.240 [LOGS *aa-3788.log] <0> :操作成功完成。
  3. 3012 74368415036027.851 [MESS 111] <0> :操作成功完成。
  4. 3012 74368416256887.414 [LEAVE:*map:268:18]
  5. 3012 74368417286318.340 [LEAVE:]
复制代码



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

使用道具 举报

5198#
 楼主| 发表于 2013-4-5 13:05:25 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 12:15 发表
如果是笔记本的话接一个外置可以,台式的话是比较麻烦,没有环境调试那就没办法了,还是搞注册表得了=。=


笔记本的话接一个外置可以?
我在VGA口(投影仪口) 上接了一个, 两个 显示的都一样, 设备管理只有一个显卡。
你说外置式USB显卡吗? 没有。

你搞定了, 将注册表的操作流程 告诉我, 我加到PECMD中。 或者 写成一个 内置脚本函数。

笔记本其实有2个显卡。 但始终只有其中一个工作。不知怎么2个都用上。 (Intel内置, NVIDIA 独显)

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

使用道具 举报

5199#
 楼主| 发表于 2013-4-5 13:55:10 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 11:23 发表
DISP 能够指定某个显示器来设置分辨率吗?

另外设置分辨率之后可否延迟生效?即只写注册表不立即应用。

因为在加载显卡驱动之前预先设置分辨率然后加载显卡驱动完成后会自动重设分辨率等,这时候屏幕会闪 ...


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

DISP 已加 延时开关
*delay则只写注册表

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

使用道具 举报

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

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

你这话是错误的!
cmd.exe /c chcp 437&netsh /?
这样得到的是英文帮助
回复

使用道具 举报

5201#
 楼主| 发表于 2013-4-5 15:18:35 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 14:42 发表

你这话是错误的!
cmd.exe /c chcp 437&netsh /?
这样得到的是英文帮助


这种方法 对控制台 chcp 可行。

EXEC   cmd.exe /k "chcp 437 & bcdedit"    //有效 , 控制台

EXEC*  &&V1=!cmd.exe /c "chcp 437 & bcdedit"   //无效, 非控制台,而是管道

EXEC cmd.exe /k "chcp 437 & calc" //无效 , CALC是非控制台程序

  1. FILE aa.tmp
  2. EXEC =!cmd.exe /c "chcp 437&bcdedit > aa.tmp"
  3. READ aa.tmp,*r,&&V1
  4. FILE aa.tmp
  5. MESS %&V1% //英文

  6. EXEC* &&V2=!bcdedit
  7. MESS %&V2% //中文
复制代码



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

使用道具 举报

5202#
发表于 2013-4-5 15:20:22 | 只看该作者
netsh本来就是控制台的程序
回复

使用道具 举报

5203#
 楼主| 发表于 2013-4-5 15:27:03 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 15:20 发表
netsh本来就是控制台的程序

是, 这个可以。
回复

使用道具 举报

5204#
发表于 2013-4-5 15:28:47 | 只看该作者
原帖由 mdyblog 于 2013-4-5 15:18 发表


这种方法 对控制台 chcp 可行。

EXEC   cmd.exe /k "chcp 437 & bcdedit"    //有效 , 控制台

EXEC &&V1=!cmd.exe /c "chcp 437 & bcdedit"   //无效, 非控制台,而是管道

EXEC cmd.exe /k ...

EXEC*&& V1=cmd.exe "/c chcp 437 &netsh/?"
EXEC* &&V2=!cmd.exe /c "chcp 437 & bcdedit"
mess %V1% %v2%
你代码错误了,少了个*
回复

使用道具 举报

5205#
 楼主| 发表于 2013-4-5 17:04:20 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 15:28 发表

EXEC*&& V1=cmd.exe "/c chcp 437 &netsh/?"
EXEC* &&V2=!cmd.exe /c "chcp 437 & bcdedit"
mess %V1% %v2%
你代码错误了,少了个*

加了*不一样,
加了*是管道 , 不是 控制台方式,  就无效了。


EXEC* &&V1=cmd.exe "/c chcp 437 &netsh/?"
MESS %&V1%

结果是中文:
  1. 用法: netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | *]
  2. [Command | -f ScriptFile]
  3. 下列指令有效:
  4. 此上下文中的命令:
  5. ? - 显示命令列表。
  6. add - 在项目列表上添加一个配置项目。
  7. advfirewall - 更改到 `netsh advfirewall' 上下文。
复制代码

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

使用道具 举报

5206#
 楼主| 发表于 2013-4-5 17:52:16 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 01:33 发表
放弃,直接调那几个API都不行,大概是不同进程的关系,改名掉.mui文件也不行,中文就中文吧。


感觉  和这个函数有关:
BOOL SetLocaleInfoW(  LCID Locale,  LCTYPE LCType,   LPCWSTR lpLCData  );
回复

使用道具 举报

5207#
发表于 2013-4-5 19:43:05 | 只看该作者
原帖由 mdyblog 于 2013-4-5 13:05 发表


笔记本的话接一个外置可以?
我在VGA口(投影仪口) 上接了一个, 两个 显示的都一样, 设备管理只有一个显卡。
你说外置式USB显卡吗? 没有。

你搞定了, 将注册表的操作流程 告诉我, 我加到PECMD中 ...


我指的是多显示器,不是显卡。在完整的 win 下面,如果是 n 卡,驱动里面有选择默认用哪个显卡。

我记得设置屏幕分辨率并不用牵扯到显卡上的,等下我查查资料看。


注册表方式做成通用手段貌似不大可行,基本上相当于硬编码了,我是设置好分辨率后,从 HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers 这里导出 REG,然后在 DEVI 显卡驱动之前 REG IMPORT(REGI 能导入 REG 文件吗?多启动一个进程老觉得不爽) 的。

USB 外置显卡这东西太稀奇了,一万年没有见过啊。
回复

使用道具 举报

5208#
发表于 2013-4-5 19:45:01 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 14:42 发表

你这话是错误的!
cmd.exe /c chcp 437&netsh /?
这样得到的是英文帮助

chcp 了不能用 EXEC* 得到返回,算了中文就中文了。

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

使用道具 举报

5209#
发表于 2013-4-5 19:56:36 | 只看该作者
ENVI @窗口和控件名.POSTMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]     //异步发送消息
ENVI @窗口和控件名.SENDMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]     //同步发送消息
不知道改了哪里,这两个无法传送参数了,请修改!
回复

使用道具 举报

5210#
 楼主| 发表于 2013-4-5 20:00:25 | 只看该作者
原帖由 2010qaqz111 于 2013-4-5 19:45 发表
chcp 了不能用 EXEC* 得到返回,算了中文就中文了。


用法5543#有, 再贴;
  1. TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
  2. SET TMPF=.%&__PID%
  3. FILE aa.%&__PID%.tmp
  4. EXEC =!cmd.exe /c "chcp 437&bcdedit > aa.%&__PID%.tmp"
  5. READ  aa.%&__PID%.tmp,*r,&&V1      
  6. FILE aa.%&__PID%.tmp
  7. MESS  %&V1%   //英文
复制代码
算法: 隐藏方式执行并 输出到一个 临时文件, 再 读取该文件, 再删掉 临时文件; 显示 。
回复

使用道具 举报

5211#
发表于 2013-4-5 20:02:13 | 只看该作者
原帖由 mdyblog 于 2013-4-5 17:04 发表

加了*不一样,
加了*是管道 , 不是 控制台方式,  就无效了。


EXEC* &&V1=cmd.exe "/c chcp 437 &netsh/?"
MESS %&V1%
结果是中文:用法: netsh [-a AliasFile] [-c Context] [-r RemoteMachine] ...

怪了,批处理运行cmd.exe "/c chcp 437 &netsh/?">d:\a.tem
得到的内容是英文,而EXEC* &&V1=cmd.exe "/c chcp 437 &netsh/?"得到的是中文
回复

使用道具 举报

5212#
发表于 2013-4-5 20:04:49 | 只看该作者
估计是exec* 的代码页不被转换引起的
回复

使用道具 举报

5213#
 楼主| 发表于 2013-4-5 20:10:26 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 19:56 发表
ENVI @窗口和控件名.POSTMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]     //异步发送消息
ENVI @窗口和控件名.SENDMSG=[:变量名;]消息号[;参数wPrm[;参数lPrm]]     //同步发送消息
不知道改了哪里,这两个 ...

可以啊?!
  1. TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
  2. WIN1
  3. _SUB WIN1,W289H249,新窗口1,
  4.     ENVI @WIN1.MSG=#1::wp,lp,MESS- HELLO wp=[%wp%],lp=[%lp%]@#OK
  5.     ENVI @WIN1.SENDMSG=#1;11;12
  6.     ENVI @WIN1.POSTMSG=#1;21;22
  7. _END  
复制代码
回复

使用道具 举报

5214#
发表于 2013-4-5 20:18:46 | 只看该作者
原帖由 mdyblog 于 2013-4-5 20:10 发表

可以啊?!
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
WIN1
_SUB WIN1,W289H249,新窗口1,
    ENVI @WIN1.MSG=#1::wp,lp,MESS- HELLO wp=[%wp%],lp=[%lp%]@#OK
    ENVI @WIN1.SENDMSG=#1;11;12
    E ...

TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
WIN1
_SUB WIN1,W289H249,新窗口1,
    ENVI @WIN1.MSG=#1::wp,lp,MESS- HELLO wp=[%wp%],lp=[%lp%]@#OK
    ENVI @WIN1.SENDMSG=#1,11,12
    ENVI @WIN1.POSTMSG=#1,21,22
_END  
再试试
回复

使用道具 举报

5215#
发表于 2013-4-5 20:20:44 | 只看该作者
现在只能:ENVI @WIN1.SENDMSG=#1;11;12
不能使用:ENVI @WIN1.SENDMSG=#1,11,12
回复

使用道具 举报

5216#
发表于 2013-4-5 20:25:01 | 只看该作者
原帖由 mdyblog 于 2013-4-5 20:00 发表


用法5543#有, 再贴;TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
SET TMPF=.%&__PID%
FILE aa.%&__PID%.tmp
EXEC =!cmd.exe /c "chcp 437&bcdedit > aa.%&__PID%.tmp"
READ  aa.%&__PID%.tmp,*r,&&V1  ...

这个方法知道,就是不想走临时文件。

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

使用道具 举报

5217#
发表于 2013-4-5 20:26:09 | 只看该作者
原帖由 mdyblog 于 2013-4-5 20:00 发表


用法5543#有, 再贴;TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
SET TMPF=.%&__PID%
FILE aa.%&__PID%.tmp
EXEC =!cmd.exe /c "chcp 437&bcdedit > aa.%&__PID%.tmp"
READ  aa.%&__PID%.tmp,*r,&&V1  ...

用下面的代码是英文
EXEC* &&V1=!cmd.exe "/c graftabl 437 &netsh/?"
MESS %&V1%  

[ 本帖最后由 2011hwo1 于 2013-4-5 20:31 编辑 ]
回复

使用道具 举报

5218#
 楼主| 发表于 2013-4-5 20:44:51 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 20:20 发表
现在只能:ENVI @WIN1.SENDMSG=#1;11;12
不能使用:ENVI @WIN1.SENDMSG=#1,11,12

哦, 改了。
回复

使用道具 举报

5219#
 楼主| 发表于 2013-4-5 20:48:19 | 只看该作者
原帖由 2011hwo1 于 2013-4-5 20:26 发表

用下面的代码是英文
  

是的 , 不能EXEC*

而用 EXEC
TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
// LangRun  返回名 语言  命令
_SUB LangRun *
    FILE aa.%&__PID%.tmp
    MSTR &&cmd1=<3->%*
    EXEC =!cmd.exe /c "chcp %2 & %cmd1% > aa.%&__PID%.tmp"
    READ  aa.%&__PID%.tmp,*r,%~1      
    FILE aa.%&__PID%.tmp   
_END
SET &&V1=
LangRun  &&V1  437  netsh/?  
MESS  %&V1%   //英文  

结果英文:
  1. Usage: netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | *]
  2.              [Command | -f ScriptFile]
  3. The following commands are available:
  4. Commands in this context:
  5. ?              - Displays a list of commands.
  6. add            - Adds a configuration entry to a list of entries.
  7. advfirewall    - Changes to the `netsh advfirewall' context.
  8. branchcache    - Changes to the `netsh branchcache' context.
  9. bridge         - Changes to the `netsh bridge' context.
  10. delete         - Deletes a configuration entry from a list of entries.
  11. dhcpclient     - Changes to the `netsh dhcpclient' context.
复制代码

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

使用道具 举报

5220#
发表于 2013-4-5 21:13:15 | 只看该作者
pecmdedit能不能不将 TAB 转换为空格?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-8 12:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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