无忧启动论坛

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

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

    [复制链接]
9271#
发表于 2015-4-20 17:55:45 | 只看该作者
本帖最后由 ling3882688 于 2015-4-21 03:42 编辑
mdyblog 发表于 2015-4-20 17:47
FORX * %parts%,pt,
{
......

好像有点明白了,我自己DIY了一下,就是这个效果。谢谢M大。
_SUB ListPPt
        ENVI^ FORCELOCAL=1
        SET &hd=%~1
        CALC #hd=%hd%
        PART list part %hd%,&&pts
        FORX * %pts%,&&pt,
        {
        mess %&pt%
        }

_END

ListPPt 0 &&ppts
回复

使用道具 举报

9272#
发表于 2015-4-21 03:36:23 | 只看该作者
本帖最后由 ling3882688 于 2015-4-21 03:38 编辑
mdyblog 发表于 2015-4-20 17:47
FORX * %parts%,pt,
{
......

照葫芦画个瓢:
//获取活动分区物理编号
_SUB GetAPart
        ENVI^ FORCELOCAL=1
        SET &hd=%~1
        CALC #hd=%hd%
        PART list part %hd%,&&pts
        SET &Active=不存在
        FORX * %pts%,&&pt,
        {
            LSTR &&c0=1,%pt%
            FIND $%c0%=@, EXIT -  //扩展
            TEAM  PART -phy# list part %hd%:%pt%,&&v1| MSTR &&adp,&&ppt=<3><8>%v1%
            IFEX $%adp%=1, CALC Active=%&ppt%  
        }  
        ENVI-ret %~2=%Active%
_END

GetAPart 0 &&APart
MESS 【活动分区为:%&APart%】

偶然遇到个有意思的问题:如果 MESS 【活动分区为:0#%&APart%】这样不能正常显示,因为#被认成了#消息窗类型,怎么处理可以让这个#符号正常显示?
别的命令有时候也会遇到这样类似的问题,例如下面这个就必须分开写用TEAM的话分隔符"|"和字符串比较的"|"冲突了:TEAM SET &&TT=PPP|IFEX |%&TT%=PPP,MESS 1111
想了一下解决了:TEAM SET &&TT=PPP|FIND $%&TT%=PPP,MESS 1111 终于又知道一点FIND 和 IFEX区别和作用了。上面的#号还是不知道怎么处理。

点评

TEAM里面嵌入|, 就加个| 没嵌入一层,就加个。 TEAM SET &&TT=PPP|IFEX ||%&TT%=PPP,MESS 1111  详情 回复 发表于 2015-4-21 08:28
MESS 【活动分区为:0#%&APart%】@  详情 回复 发表于 2015-4-21 08:26
回复

使用道具 举报

9273#
发表于 2015-4-21 07:30:29 | 只看该作者
请教一下M大,我没有找到64位的installime.exe,即安装输入法的。查了一下,可不可以用PECMD调用DLL中的API来实现这个功能,imm32.dll中有ImminstallIMEA和ImminstallIMEW两个函数。

点评

可以调用。 问题是 要知道欻第什么杨的参数表。  详情 回复 发表于 2015-4-21 08:25
回复

使用道具 举报

9274#
 楼主| 发表于 2015-4-21 08:25:24 | 只看该作者
hhh333 发表于 2015-4-21 07:30
请教一下M大,我没有找到64位的installime.exe,即安装输入法的。查了一下,可不可以用PECMD调用DLL中的API ...


可以调用。 问题是 要知道传入什么样的参数表。

点评

ImmInstallIME 函数原型: HKL ImmInstallIME(LPCTSTR lpszIMEFileName, LPCTSTR lpszLayoutText); 函数的两个参数分别为输入法IME文件的文件名和在控制面板的是输入法选项中显示的输入法名称。函数调用后将返回  详情 回复 发表于 2015-4-21 10:05
回复

使用道具 举报

9275#
 楼主| 发表于 2015-4-21 08:26:35 | 只看该作者
本帖最后由 mdyblog 于 2015-4-21 08:30 编辑
ling3882688 发表于 2015-4-21 03:36
照葫芦画个瓢:
//获取活动分区物理编号
_SUB GetAPart


MESS 【活动分区为:0#%&APart%】@

MESS 【活动分区为:0#%&APart%】#OK

点评

谢谢M大。  详情 回复 发表于 2015-4-21 14:12
回复

使用道具 举报

9276#
 楼主| 发表于 2015-4-21 08:28:24 | 只看该作者
ling3882688 发表于 2015-4-21 03:36
照葫芦画个瓢:
//获取活动分区物理编号
_SUB GetAPart

TEAM里面嵌入|, 就加个|
没嵌入一层,就加个。

TEAM SET &&TT=PPP|IFEX ||%&TT%=PPP,MESS 1111
回复

使用道具 举报

9277#
发表于 2015-4-21 10:05:57 | 只看该作者
mdyblog 发表于 2015-4-21 08:25
可以调用。 问题是 要知道传入什么样的参数表。


ImmInstallIME
函数原型:
HKL ImmInstallIME(LPCTSTR lpszIMEFileName, LPCTSTR lpszLayoutText);
函数的两个参数分别为输入法IME文件的文件名和在控制面板的是输入法选项中显示的输入法名称。函数调用后将返回一个被安装输入法的输入法标识符(或称做输入法句柄)。
示例代码:
HKL hKL = ImmInstallIME("c:\\winwb86.ime", "王码五笔型输入法86版");


----网上查到的

点评

你就试试 PECMD CALL $imm32.dll,ImminstallIMEW,c:\winwb86.ime, 王码五笔型输入法86版  详情 回复 发表于 2015-4-21 10:14
回复

使用道具 举报

9278#
 楼主| 发表于 2015-4-21 10:14:52 | 只看该作者
hhh333 发表于 2015-4-21 10:05
ImmInstallIME
函数原型:
HKL ImmInstallIME(LPCTSTR lpszIMEFileName, LPCTSTR lpszLayoutText);

你就试试

PECMD CALL $imm32.dll,ImminstallIMEW,c:\winwb86.ime, 王码五笔型输入法86版

点评

似乎不行。我在VC2005中写了如下程序: 可以注册成功,但需要msvcr80.dll的支持,不知有没有办法不要vc2005的支持。  详情 回复 发表于 2015-4-21 11:32
回复

使用道具 举报

9279#
发表于 2015-4-21 11:32:33 | 只看该作者
mdyblog 发表于 2015-4-21 10:14
你就试试

PECMD CALL $imm32.dll,ImminstallIMEW,c:\winwb86.ime, 王码五笔型输入法86版

似乎不行。我在VC2005中写了如下程序:
  1. #include "stdafx.h"
  2. #include <Windows.h>
  3. #include "Imm.h"
  4. #pragma comment(lib,"imm32.lib")


  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7.         HKL IME = ImmInstallIME(argv[1], argv[2]);
  8.         if(IME==0)
  9.         {
  10.                 printf("Install IME Failure.\n");
  11.         }
  12.         else
  13.         {
  14.                 printf("Install IME Success.\n");
  15.         }
  16.         return 0;
  17. }
复制代码


可以注册成功,但需要msvcr80.dll的支持,不知有没有办法不要vc2005的支持。

点评

static模式编译。  详情 回复 发表于 2015-4-21 12:53
回复

使用道具 举报

9280#
 楼主| 发表于 2015-4-21 12:53:04 | 只看该作者
hhh333 发表于 2015-4-21 11:32
似乎不行。我在VC2005中写了如下程序:

static模式编译。

点评

M大,在mount.mbr里,可能存在需要的代码: ...... _SUB mount.mbr GetDevice &&device FIND $%device%=,exit //空设备,返回 RSTR n_hd=1,%device%里 ...... 比如这个红色的1,  详情 回复 发表于 2015-4-21 16:14
回复

使用道具 举报

9281#
发表于 2015-4-21 14:12:05 来自手机 | 只看该作者
mdyblog 发表于 2015-4-21 08:26
MESS 【活动分区为:0#%&APart%】@

MESS 【活动分区为:0#%&APart%】#OK

谢谢M大。
回复

使用道具 举报

9282#
发表于 2015-4-21 14:25:56 | 只看该作者
x64的pecmd.exe用 Resource Hacker打开不开吗?
回复

使用道具 举报

9283#
发表于 2015-4-21 16:14:38 | 只看该作者
本帖最后由 chiannet 于 2015-4-21 16:17 编辑
mdyblog 发表于 2015-4-21 12:53
static模式编译。


M大,在mount.mbr里,可能存在需要改进的代码:

......
_SUB mount.mbr
    GetDevice &&device
   
    FIND $%device%=,exit   //空设备,返回
    RSTR n_hd=1,%device%
......



比如这个红色的1,如果存在物理设备数大于9个的场合,取一位是不是就不对了?

点评

不好意思,这是我加的脚本,不是PECMD的一部分。本意是看看怎样添加自己的命令,脚本本身写的比较马虎,请随意修改。  详情 回复 发表于 2015-4-21 17:13
是 SP_STAR的吧。 你问问S大吧。  详情 回复 发表于 2015-4-21 16:23
回复

使用道具 举报

9284#
 楼主| 发表于 2015-4-21 16:23:18 | 只看该作者
本帖最后由 mdyblog 于 2015-4-21 16:29 编辑
chiannet 发表于 2015-4-21 16:14
M大,在mount.mbr里,可能存在需要改进的代码:

......


是 SP_STAR的吧。
你问问S大吧。


----
问题不大吧。实际没有超过9的(除了测试)


===试试
  1. SED n_hd=0,[^0-9], ,%device%
  2. MSTR  n_hd=<-1>%n_hd%
复制代码


回复

使用道具 举报

9285#
发表于 2015-4-21 17:13:50 | 只看该作者
chiannet 发表于 2015-4-21 16:14
M大,在mount.mbr里,可能存在需要改进的代码:

......

不好意思,这是我加的脚本,不是PECMD的一部分。本意是看看怎样添加自己的命令,脚本本身写的比较马虎,请随意修改。

点评

s大,还有一个问题,那段findusb的代码,在某实机测试正常,在vm虚拟机里,那个u盘被识别为本地硬盘,导致未能正确找到u盘上的高端隐藏区,怎么破此问题?  详情 回复 发表于 2015-4-21 17:40
回复

使用道具 举报

9286#
发表于 2015-4-21 17:40:08 来自手机 | 只看该作者
sp_star 发表于 2015-4-21 17:13
不好意思,这是我加的脚本,不是PECMD的一部分。本意是看看怎样添加自己的命令,脚本本身写的比较马虎, ...

s大,还有一个问题,那段findusb的代码,在某实机测试正常,在vm虚拟机里,那个u盘被识别为本地硬盘,导致未能正确找到u盘上的高端隐藏区,怎么破此问题?

点评

findusb是通过"总线类型"来判断U盘的,vm里如果是通过"添加硬盘"的方式加进去, 总线类型是SCSI,肯定是区分不出来的。 可以试试这个办法,但我自己没试过 MSTR &&USB=%vd% FIND $%USB  详情 回复 发表于 2015-4-21 17:48
回复

使用道具 举报

9287#
发表于 2015-4-21 17:48:22 | 只看该作者
chiannet 发表于 2015-4-21 17:40
s大,还有一个问题,那段findusb的代码,在某实机测试正常,在vm虚拟机里,那个u盘被识别为本地硬盘,导 ...

findusb是通过"总线类型"来判断U盘的,vm里如果是通过"添加硬盘"的方式加进去, 总线类型是SCSI,肯定是区分不出来的。

可以试试这个办法,但我自己没试过
            MSTR &&USB=<9>%vd%
            FIND $%USB%=7, SET ret=%ret% %dsk%  
改成
            MSTR &&USB=<7>%vd%
            FIND $%USB%=11, SET ret=%ret% %dsk%
回复

使用道具 举报

9288#
发表于 2015-4-23 05:59:47 | 只看该作者



M大请看:

VM 虚拟机下,
运行PECMD part -GUI,选择磁盘1的4#分区,点激活按钮,列表框的1#4的激活标志从0变1;再点激活按钮,列表框1#4的激活标志从1变0,操作结果貌似正确。

但是直接运行“PECMD part 1#4 a”  “PECMD part 1#4 -a”,列表框的1#4的激活标志均不会变。操作结果不正确?

点评

实际操作了。磁盘上已经变了。只是windows不没显示这种变化。 可以 -up -hup PECMD part -super -up -hup 1#4 a  详情 回复 发表于 2015-4-23 15:30
回复

使用道具 举报

9289#
 楼主| 发表于 2015-4-23 15:30:41 | 只看该作者
chiannet 发表于 2015-4-23 05:59
M大请看:

VM 虚拟机下,

实际操作了。磁盘上已经变了。只是windows不没显示这种变化。
可以 -up -hup

PECMD part  -super -up -hup 1#4 a
回复

使用道具 举报

9290#
发表于 2015-4-23 17:33:52 | 只看该作者
本帖最后由 ling3882688 于 2015-4-23 17:35 编辑

M大,怎么把一整个SUB子过程里的内容全部写入文本(不是一行一行写入),例如下面这个例子:
_SUB MySub
1111111
2222222
3333333
_END

点评

ENVI^ ForceLocal=1 SET$NL=0D 0A SET TEXT=_SUB MySub SET TEXT=%TEXT%%NL%1111111 SET TEXT=%TEXT%%NL%2222222 SET TEXT=%TEXT%%NL%3333333 SET TEXT=%TEXT%%NL%_END WRIT C:\MY.WCS,$+0,%TEXT% 或  详情 回复 发表于 2015-4-24 07:08
回复

使用道具 举报

9291#
 楼主| 发表于 2015-4-24 07:08:44 | 只看该作者
ling3882688 发表于 2015-4-23 17:33
M大,怎么把一整个SUB子过程里的内容全部写入文本(不是一行一行写入),例如下面这个例子:
_SUB MySub
...

ENVI^   ForceLocal=1
SET$NL=0D 0A
SET TEXT=_SUB MySub
SET TEXT=%TEXT%%NL%1111111
SET TEXT=%TEXT%%NL%2222222
SET TEXT=%TEXT%%NL%3333333
SET TEXT=%TEXT%%NL%_END

WRIT C:\MY.WCS,$+0,%TEXT%

或者直接:
WRIT C:\MY.WCS,$+0,_SUB MySub%NL%1111111%NL%2222222%NL%3333333%NL%_END

点评

有没有更暴力更直接的方式?因为我的SUB过程有两百多行。  详情 回复 发表于 2015-4-24 10:06
回复

使用道具 举报

9292#
发表于 2015-4-24 10:06:41 | 只看该作者
mdyblog 发表于 2015-4-24 07:08
ENVI^   ForceLocal=1
SET$NL=0D 0A
SET TEXT=_SUB MySub

有没有更暴力更直接的方式?因为我的SUB过程有两百多行。

点评

做成资源。 再 就没了。  详情 回复 发表于 2015-4-24 10:57
回复

使用道具 举报

9293#
 楼主| 发表于 2015-4-24 10:57:04 | 只看该作者
ling3882688 发表于 2015-4-24 10:06
有没有更暴力更直接的方式?因为我的SUB过程有两百多行。

做成资源。
再 就没了。

点评

我有个配置文件,用你之前给我的ReadINI可以读取,我想将配置文件直接写到pecmd里,不知能不能实现,如果直接将我的配置.ini里的文件附加到PECMD.INI里也可以读,但是CMPS压缩之后就不行了。我的意思是可不可以Readi  详情 回复 发表于 2015-4-24 12:10
回复

使用道具 举报

9294#
发表于 2015-4-24 12:10:50 | 只看该作者
mdyblog 发表于 2015-4-24 10:57
做成资源。
再 就没了。

我有个配置文件,用你之前给我的ReadINI可以读取,我想将配置文件直接写到pecmd里,不知能不能实现,如果直接将我的配置.ini里的文件附加到PECMD.INI里也可以读,但是CMPS压缩之后就不行了。我的意思是可不可以Readini直接读一个子过程,然后子过程里写入配置的内容。
pecmd.zip (865 Bytes, 下载次数: 3)

点评

试试这个  详情 回复 发表于 2015-4-24 13:07
回复

使用道具 举报

9295#
 楼主| 发表于 2015-4-24 13:07:59 | 只看该作者
本帖最后由 mdyblog 于 2015-4-24 13:11 编辑
ling3882688 发表于 2015-4-24 12:10
我有个配置文件,用你之前给我的ReadINI可以读取,我想将配置文件直接写到pecmd里,不知能不能实现,如果 ...


试试这个 PECMD.zip (650 Bytes, 下载次数: 3)
效果:

点评

谢M大!就是这个效果。  详情 回复 发表于 2015-4-24 13:58
回复

使用道具 举报

9296#
发表于 2015-4-24 13:58:21 | 只看该作者
本帖最后由 ling3882688 于 2015-4-24 14:07 编辑
mdyblog 发表于 2015-4-24 13:07
试试这个
效果:

谢M大!就是这个效果。用别的exe调用pecmd的时候参数传递有什么好的办法吗?比如获取PECMD执行后的某个变量。我现在一般是PECMD执行结果想要得到的变量写入文件然后再来读取。

点评

我前面有个专贴,你找找,不太远。  详情 回复 发表于 2015-4-24 14:17
回复

使用道具 举报

9297#
 楼主| 发表于 2015-4-24 14:17:12 | 只看该作者
ling3882688 发表于 2015-4-24 13:58
谢M大!就是这个效果。用别的exe调用pecmd的时候参数传递有什么好的办法吗?比如获取PECMD执行后的某个变 ...


我前面有个专层,你找找,不太远。

点评

嗯,我也是记得有点印象,当时没留心,我找找看吧。  详情 回复 发表于 2015-4-24 14:25
回复

使用道具 举报

9298#
发表于 2015-4-24 14:25:22 | 只看该作者
mdyblog 发表于 2015-4-24 14:17
我前面有个专层,你找找,不太远。

嗯,我也是记得有点印象,当时没留心,我找找看吧。

点评

好像已经收录到 PECMD补充说明.doc  详情 回复 发表于 2015-4-24 15:26
回复

使用道具 举报

9299#
 楼主| 发表于 2015-4-24 15:26:58 | 只看该作者
ling3882688 发表于 2015-4-24 14:25
嗯,我也是记得有点印象,当时没留心,我找找看吧。

好像已经收录到  PECMD补充说明.doc

点评

谢M大,找到了。  详情 回复 发表于 2015-4-24 15:29
回复

使用道具 举报

9300#
发表于 2015-4-24 15:29:23 | 只看该作者
mdyblog 发表于 2015-4-24 15:26
好像已经收录到  PECMD补充说明.doc

谢M大,找到了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-27 17:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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