无忧启动论坛

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

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

    [复制链接]
15061#
 楼主| 发表于 2020-3-1 12:17:07 | 只看该作者
slore 发表于 2020-2-24 19:30
我不知道PECMD怎么实现的,我就是Shell对象接口(COM),调用指定文件的右键菜单。不是简单的API直接调用。 ...

1A: PINT  和 UNPINT在程序上是一样的。
取决于 后面的【[菜单名称|菜单标识|#字符串ID] 】。

菜单名称 不同,功能就不同。实际功能有系统决定。

1B:
对于 UNPINT, 实际系统选对  【菜单名称】即可。


1C:
Win10 ,也可写到  PECMD.EXE.USRCFG.INI的
FromStartMenu:?|(从.开始.菜单)|(從.開始.菜單)|(From .Start. Menu)
FromTaskBand:?|(从任务栏)|(從任務欄)|(From Task Band)


然后调用
PINT -TaskBand|-StartMenu
即可






2:
EXEC -runrmenu:菜单项名   文件名   
就是调用 PINT的 实现的。


点评

Windows 操作系统设计的时候不会不同系统用不同的资源。 菜单是有内部名称的, taskbarpin, taskbarunpin,直接DoVerb就完了。  详情 回复 发表于 2020-3-1 12:28
回复

使用道具 举报

15062#
发表于 2020-3-1 12:28:37 | 只看该作者
本帖最后由 slore 于 2020-3-1 12:34 编辑
mdyblog 发表于 2020-3-1 12:17
1A: PINT  和 UNPINT在程序上是一样的。
取决于 后面的【[菜单名称|菜单标识|#字符串ID] 】。

Windows 操作系统设计菜单不会不同系统用不同的资源名调用,不然能把程序员累死。

菜单是有内部名称的, taskbarpin, taskbarunpin,直接DoVerb就完了,不需要把不同语言的菜单定义出来。中文,繁体中文,英语,日语,韩语,法语,土耳其,阿拉伯等等。。。写配置文件得多难用。

点评

PE下大部分用的都是第三方开始菜单,然后这两个地方名称不一样了,不知道会不会有影响到你说的内部名称  详情 回复 发表于 2020-3-1 12:45
回复

使用道具 举报

15063#
发表于 2020-3-1 12:45:23 | 只看该作者
slore 发表于 2020-3-1 12:28
Windows 操作系统设计菜单不会不同系统用不同的资源名调用,不然能把程序员累死。

菜单是有内部名称的 ...

PE下大部分用的都是第三方开始菜单,然后这两个地方名称不一样了,不知道会不会有影响到你说的内部名称

点评

好的开始菜单代替软件,会接管系统的菜单。 startpin, startunpin 正常系统,StartIsBack也可以。 其他菜单的PE下也不主流,撑死3个,要用的自己处理。 即便是第三方程序,也直接可以读取对应的第三方开始菜单  详情 回复 发表于 2020-3-1 12:50
回复

使用道具 举报

15064#
发表于 2020-3-1 12:50:40 | 只看该作者
红毛樱木 发表于 2020-3-1 12:45
PE下大部分用的都是第三方开始菜单,然后这两个地方名称不一样了,不知道会不会有影响到你说的内部名称

好的开始菜单代替软件,会接管系统的菜单。

startpin, startunpin 正常系统,StartIsBack也可以。
其他菜单的PE下也不主流,撑死3个,要用的自己处理。
即便是第三方程序,也直接可以读取对应的第三方开始菜单的 资源 名,
不用自己配置各种语言。

点评

有源代码吗?  详情 回复 发表于 2020-3-1 14:00
回复

使用道具 举报

15065#
 楼主| 发表于 2020-3-1 14:00:34 | 只看该作者
slore 发表于 2020-3-1 12:50
好的开始菜单代替软件,会接管系统的菜单。

startpin, startunpin 正常系统,StartIsBack也可以。

有源代码吗?

点评

获取菜单,处理每个菜单项你代码有吧。 pcm->GetCommandString(mmi.wID, GCS_VERBW, NULL, (char *)verbbuffer, MAX_PATH); 可以获得到菜单名。  详情 回复 发表于 2020-3-1 19:09
用右键菜单还是比较绕,也不通用,虽然现在工作没问题。slore说的简单些。  详情 回复 发表于 2020-3-1 18:42
回复

使用道具 举报

15066#
发表于 2020-3-1 18:42:40 | 只看该作者

用右键菜单还是比较绕,也不通用,虽然现在工作没问题。slore说的简单些。
回复

使用道具 举报

15067#
发表于 2020-3-1 19:09:25 | 只看该作者
本帖最后由 slore 于 2020-3-1 19:13 编辑

都开源好几年了。获取菜单,处理每个菜单项你代码有吧。

pcm->GetCommandString(mmi.wID, GCS_VERBW, NULL, (char *)verbbuffer, MAX_PATH);



IContextMenu :: GetCommandString方法
获取有关快捷菜单命令的信息,包括帮助字符串和命令的语言无关或规范名称。
GCS_VERBA
pszName设置为ANSI字符串,其中包含菜单项与语言无关的命令名称。
GCS_VERBW
pszName设置为Unicode字符串,其中包含菜单项与语言无关的命令名称。

点评

用 API/COM, 比如 FolderItemVerbs 怎么实现?  详情 回复 发表于 2020-3-2 02:06
回复

使用道具 举报

15068#
 楼主| 发表于 2020-3-2 02:06:06 | 只看该作者
slore 发表于 2020-3-1 19:09
都开源好几年了。获取菜单,处理每个菜单项你代码有吧。

pcm->GetCommandString(mmi.wID, GCS_VERBW,  ...

用  API/COM, 比如 FolderItemVerbs
怎么实现?

点评

WAIT = 线程等待为什么会卡很久?  详情 回复 发表于 2020-3-3 13:00
回复

使用道具 举报

15069#
发表于 2020-3-3 13:00:02 | 只看该作者
mdyblog 发表于 2020-3-2 02:06
用  API/COM, 比如 FolderItemVerbs
怎么实现?
  1. ENVI^ ENVIMODE=1
  2. CALL @MAIN
  3. _SUB MAIN,W800H600,TEST,
  4.     ENVI @this.visible=1
  5.     THREAD CALL B &c
  6.     WAIT =%&&__LastTID%
  7.     MESS. OVER<_SUB MAIN>
  8. _END

  9. _SUB B
  10.     CALC &a=1+2
  11. _END
复制代码



WAIT =
线程等待为什么会卡很久?

点评

WAIT = 是专门设计的, 用来 死等。极少数逻辑中途需要。  详情 回复 发表于 2020-3-24 03:31
回复

使用道具 举报

15070#
发表于 2020-3-4 01:23:31 | 只看该作者
本帖最后由 红毛樱木 于 2020-3-7 17:38 编辑

CHEK控件如果用
※背景进度: ENVI @窗口或控件名.percent=[百分比][C|R|L|F][:背景色][:进度色][:文本色][:文本]
会随机性崩溃(RADI控件也是同样问题、后面发现GROU空间也有这问题)

  1. CALL @MAIN
  2. _SUB MAIN,W800H600
  3.     CHEK Check1,L180T336W100H20,可写挂载,,1
  4.     ENVI @this.Visible=1
  5.     WAIT 1000
  6.     TEAM ENVI @Check1.percent=100F:0xFFFFFF:0xFFFFFF:0x000000:
  7. _END
复制代码



点评

先要 disable  详情 回复 发表于 2020-3-24 03:26
回复

使用道具 举报

15071#
发表于 2020-3-6 18:43:02 | 只看该作者
本帖最后由 hhh333 于 2020-3-6 20:59 编辑

我是不是发现了一个bug,大家来看一看
核心代码是:RAMD ImDisk,L438,NTFS,Y:,ImDisk
第一次运行,没有问题,很快,进行挂载如MMC.WIM
第二次运行,对Y盘容量进行扩充:RAMD ImDisk,L696,,Y:,ImDisk (或者RAMD ImDisk,L696,NTFS,Y:,ImDisk,要不要NTFS效果一样)。很慢,约要半分钟以上,盘的容量扩展成功,但原来挂载的MMC丢失,新挂载的如NET.WIM没有问题;
第三次运行,再扩容如:RAMD ImDisk,L900,,Y:,ImDisk ,很快,也不丢失前面的NET.WIM的挂载;
以后再扩容不再有问题。
使用含IMDISK的与不含的PECMD没有区别,用IMDISK的驱动15年和最新的也一样。

以上是用硬盘启动时进行测试的结果,回头我再虚拟机测一下,不会与机器有关吧?

**刚才试了,虚拟机中好像64位的没有问题,但实机64位与32位都有问题。总之就是第一次扩容慢且丢失原挂载,以后就不会了。

点评

你这命令是完全重新生成Y盘了。扩容应该是这样的吧: RAMD ImDisk* -e -s 696M -m Y:  详情 回复 发表于 2020-3-6 19:00
回复

使用道具 举报

15072#
发表于 2020-3-6 19:00:47 | 只看该作者
hhh333 发表于 2020-3-6 18:43
我是不是发现了一个bug,大家来看一看
核心代码是:RAMD ImDisk,L438,NTFS,Y:,ImDisk
第一次运行,没有问 ...

你这命令是完全重新生成Y盘了。扩容应该是这样的吧:
RAMD ImDisk* -e -s 696M -m Y:

点评

你这种用法似乎就没有问题,PECMD的帮助看起来不明所以,比较乱。说到的扩容就是我前面的用法。  详情 回复 发表于 2020-3-6 20:49
如果那么用不对的话,第三次以后也没问题,这个怎么解释?  详情 回复 发表于 2020-3-6 19:59
这么用的吗?我刚才在64位实机用我原先的方法也有问题,但虚拟机中64位好像没有问题。  详情 回复 发表于 2020-3-6 19:58
回复

使用道具 举报

15073#
发表于 2020-3-6 19:58:25 | 只看该作者
527104427 发表于 2020-3-6 19:00
你这命令是完全重新生成Y盘了。扩容应该是这样的吧:
RAMD ImDisk* -e -s 696M -m Y:

这么用的吗?我刚才在64位实机用我原先的方法也有问题,但虚拟机中64位好像没有问题。

点评

-e 一般的用法是, 调整特性参数。 比如 改为 只读。 另外 好象可用来扩容;此时需要重新格式化。  详情 回复 发表于 2020-3-24 03:24
回复

使用道具 举报

15074#
发表于 2020-3-6 19:59:49 | 只看该作者
527104427 发表于 2020-3-6 19:00
你这命令是完全重新生成Y盘了。扩容应该是这样的吧:
RAMD ImDisk* -e -s 696M -m Y:

如果那么用不对的话,第三次以后也没问题,这个怎么解释?
回复

使用道具 举报

15075#
发表于 2020-3-6 20:49:25 | 只看该作者
527104427 发表于 2020-3-6 19:00
你这命令是完全重新生成Y盘了。扩容应该是这样的吧:
RAMD ImDisk* -e -s 696M -m Y:

你这种用法似乎就没有问题,PECMD的帮助看起来不明所以,比较乱。说到的扩容就是我前面的用法。

点评

这个很好理解啊, RAMD ImDisk 是兼容PECMD4.0的用法 RAMD ImDisk* 是新开发的用法,后面可以跟imdisk.exe的所有参数  详情 回复 发表于 2020-3-6 21:03
回复

使用道具 举报

15076#
发表于 2020-3-6 21:01:33 | 只看该作者
希望M大给个说法,同时把这个RAMD帮助再细化一下。
回复

使用道具 举报

15077#
发表于 2020-3-6 21:03:46 | 只看该作者
hhh333 发表于 2020-3-6 20:49
你这种用法似乎就没有问题,PECMD的帮助看起来不明所以,比较乱。说到的扩容就是我前面的用法。

这个很好理解啊,
RAMD ImDisk   是兼容PECMD4.0的用法
RAMD ImDisk* 是新开发的用法,后面可以跟imdisk.exe的所有参数

点评

-s 696M 是再增加696,而不是总量是696吧?  详情 回复 发表于 2020-3-6 21:23
回复

使用道具 举报

15078#
发表于 2020-3-6 21:23:50 | 只看该作者
527104427 发表于 2020-3-6 21:03
这个很好理解啊,
RAMD ImDisk   是兼容PECMD4.0的用法
RAMD ImDisk* 是新开发的用法,后面可以跟imdis ...

-s 696M 是再增加696,而不是总量是696吧?

点评

对,是增加。估计是有BUG,才会扩容失败,纠结这个问题的话就只有等M大处理了。  详情 回复 发表于 2020-3-6 21:51
回复

使用道具 举报

15079#
发表于 2020-3-6 21:51:24 | 只看该作者
hhh333 发表于 2020-3-6 21:23
-s 696M 是再增加696,而不是总量是696吧?

对,是增加。估计是有BUG,才会扩容失败,纠结这个问题的话就只有等M大处理了。

点评

好像RAMD ImDisk,L696,,Y:,ImDisk 这个696也是在原来基础上增加696,比较慢似乎是达到内存上限,导致重新设置也让原来挂载的丢失了。BUG肯定还是存在。我再仔细看一下。  详情 回复 发表于 2020-3-6 22:18
回复

使用道具 举报

15080#
发表于 2020-3-6 22:18:36 | 只看该作者
527104427 发表于 2020-3-6 21:51
对,是增加。估计是有BUG,才会扩容失败,纠结这个问题的话就只有等M大处理了。

好像RAMD ImDisk,L696,,Y:,ImDisk 这个696也是在原来基础上增加696,比较慢似乎是达到内存上限,导致重新设置也让原来挂载的丢失了。BUG肯定还是存在。我再仔细看一下。
回复

使用道具 举报

15081#
发表于 2020-3-6 22:57:40 | 只看该作者
经过仔细比较发现:
1、RAMD ImDisk,L123,NTFS,Y:,ImDisk如果是第一次运行,即系统中没有虚拟Y盘时,是建立一个123M的Y:盘;
2、如果是第二次运行或第n次运行,即系统中已有Y盘时,是把Y盘的容量加123M,而且是重新格式化的,格式化要较长时间(估计是在作全盘格式化);

这明显是不合逻辑的吧,至少与说明是不符合的。

点评

先用 IFEX Y:, 判断下。  详情 回复 发表于 2020-3-24 03:20
回复

使用道具 举报

15082#
发表于 2020-3-7 01:48:11 | 只看该作者
本帖最后由 红毛樱木 于 2020-3-7 02:16 编辑

RAMD ImDisk*  -a  -s  100M  -m  Y:  -p  "/FS:NTFS /C /Y /Q"
结果失败,应该是BUG了。(虽然创建了,但是格式化失败)
参数直接搬到imdisk.exe上测试没问题
--------------------------------
扩容应该用新格式,和IMDISK参数一样的。
RAMD ImDisk*[变量名]  -e [-s 大小] [-o opt1[,opt2 ...]] [-u ImDisk编号 | -m 加载点]
测试扩容有效。

回复

使用道具 举报

15083#
发表于 2020-3-7 13:05:41 | 只看该作者
本帖最后由 hhh333 于 2020-3-7 13:07 编辑

仔细比较了一下,IMDISK产生的虚拟盘(不用物理内存占用方式)应该是与系统是共享可用内存,如下图
32位:系统最多能用2G内存,1G分配给X盘,剩下1G供系统和IMDISK盘共享,系统固定载入如内核驱动等约200~300M,剩下700~800M,如果分配给IMDISK创建的盘,由于是使用wimmount.sys进行挂载,随着使用占虚拟盘的空间会越来越多,留给系统可以支配的会越来越少,很容易出现内存不足。X盘只有1G,弄不好也容易满,接近满的状态PE就会崩溃。


64位:最多只能用3.2G,2G分配给了X盘,剩下1.2G供系统和IMDISK共享,如果IMDISK全部占满,约有400M自由空间供系统使用,但64位系统占用约比32位多100M可能300~400M,可支配内存比32位实际上约多100多M,也比较紧张,但X盘多出1G,比较宽裕。不知为何4G内存还有800M在睡觉,如果这800M也可自由支配则内存也比较宽裕了。

点评

hhh333 老大您好!我的 IMDISK 内存盘在 Win10 19577.1000 PE 挂载外置出问题了。虽然 Y: 盘可以创造,但只能在 SYSTEM 模式启动登入时才可以挂载。若是自 ADMIN 模式启动登入,则所有外置均不能挂载。 我原先放  详情 回复 发表于 2020-3-13 18:36
IMDISK有参数可以用物理内存的。  详情 回复 发表于 2020-3-7 14:40
回复

使用道具 举报

15084#
发表于 2020-3-7 14:40:10 | 只看该作者
hhh333 发表于 2020-3-7 13:05
仔细比较了一下,IMDISK产生的虚拟盘(不用物理内存占用方式)应该是与系统是共享可用内存,如下图
32位: ...

IMDISK有参数可以用物理内存的。

点评

是的,这种动态的要好一点,因为挂载的东西不是每一个都用。暂时不用就不大占内存。  详情 回复 发表于 2020-3-7 16:24
回复

使用道具 举报

15085#
发表于 2020-3-7 15:29:03 | 只看该作者
本帖最后由 红毛樱木 于 2020-3-7 20:49 编辑

再反馈一下SWIN的问题。
  1. ENVI^ ENVIMODE=1
  2. CALL @MAIN
  3. _SUB MAIN,W800H600
  4.     ENVI &Page1High=1300    //当值为1400时,滚动条就看不到Page1中的Label1了
  5.     SWIN Swin1:Page1,L42T5W700H400,,0x1C0
  6. _END

  7. _SUB Page1,W600H%&Page1High%
  8.     CALC &Top=%&Page1High% - 100
  9.     LABE Label1,L20T%&Top%W128H48,请点击"打开"按钮以浏览文件。
  10. _END
复制代码

确认了一下BUG具体数值。
  1. ENVI^ ENVIMODE=1
  2. CALL @MAIN
  3. _SUB MAIN,W800H600
  4.     ENVI &Page1High=1300    //当值为1400时,滚动条就看不到Page1中的Label1了
  5.     ENVI @this.Visible=1
  6.     SWIN Swin1:Page1,L42T5W700H400,,
  7.     //SWIN -:Page1,L42T5W194H%&Page1High%
  8. _END

  9. _SUB Page1,W600H%&Page1High%
  10.     ENVI @this.Visilbe=1
  11.     ENVI @Page1.POS=?:::&h
  12.     MESS. %&h%  //最终确认了一下%&h%的值最大为1248,即使&Page1High设置的比1248大也不行(另外一台机器测试这个值是1134)
  13. _END
复制代码


点评

测试了下。 好象是屏幕高度限制了这个值。  详情 回复 发表于 2020-3-24 03:17
回复

使用道具 举报

15086#
发表于 2020-3-7 16:24:51 | 只看该作者
红毛樱木 发表于 2020-3-7 14:40
IMDISK有参数可以用物理内存的。

是的,这种动态的要好一点,因为挂载的东西不是每一个都用。暂时不用就不大占内存。
回复

使用道具 举报

15087#
发表于 2020-3-8 11:14:54 | 只看该作者
新人,学习,
回复

使用道具 举报

15088#
发表于 2020-3-8 11:16:31 | 只看该作者
win 10 能用吗,,有没有版本限制?
回复

使用道具 举报

15089#
发表于 2020-3-12 15:34:31 | 只看该作者
之前说的TABL的高度没有随DPI变化而拉伸,实际最终确认问题是:
当状态为"0x400带打勾器"可以随DPI变化而拉伸高度
当状态不带打勾器的时候不能随DPI变化而拉伸。
回复

使用道具 举报

15090#
发表于 2020-3-13 12:00:23 | 只看该作者
本帖最后由 hhh333 于 2020-3-13 12:01 编辑

严重啊!今日测试才发现,搞了半天才知是PECMD的问题,开始以为我的硬件有问题。
新版PECMD有严重问题,主要是32位,一下子就内存不足。导致显卡等根本不能安装!换成2018年的一切正常。实机内存4G,虚拟机2G都有问题。

点评

给个演示代码  详情 回复 发表于 2020-3-13 13:02
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-1-21 03:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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