无忧启动论坛

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

[PECMD X86 & X64 V4.0.2011.0501版] WinPE命令解释程序 & WinPE登录命令。

    [复制链接]
1#
发表于 2007-1-21 18:36:43 | 显示全部楼层
回复

使用道具 举报

2#
发表于 2007-1-22 02:18:54 | 显示全部楼层
所有遇到问题的用户 建议打开调试信息XLOG 然后把lNl和LOG文件发上来 并说明lNI文件在什么路径中

另外老九不需要等我确认什么 GPL许可 大家修改了公开源码即可
回复

使用道具 举报

3#
发表于 2007-1-22 16:19:46 | 显示全部楼层
原始短消息: 早上好,刚起床,又看一下 XCMD 2.0源码,找到了渐隐淡出的问题了。
PostMessage把消息丢过去后马上执行下一命令。而本人的配置文件的下一命令是载入桌面,所以渐隐淡出几乎没有效果。这里与机子的性能有点关系。

解决的方法有二:
1、将PostMessage改为SendMessage。
2、PostMessage后 Sleep(500) 至 Sleep(1000)。


你的意思是速度太快了还是怎么的?
我特地使用 PostMessage 的,因为这样在不会有时间等待。
关键原因是,你在加载 Shell 之后,应该 再加上一句:

WAIT 5000

这样既不会影响登录速度,也不会导致 LOAD 线程过早结束而丢失渐隐效果。
回复

使用道具 举报

4#
发表于 2007-1-22 16:22:30 | 显示全部楼层
最后一句不应该是加载 Shell,而是应该等待一段时间,等 LOGO 慢慢淡出。

看我原来贴子里的 XCMD.INI
回复

使用道具 举报

5#
发表于 2007-1-22 16:28:52 | 显示全部楼层
另外,老九,下面的东西:

ENVI $Desktop=%USERPROFILE%\桌面
ENVI $StartMenu=%USERPROFILE%\「开始」菜单
ENVI $Programs=%USERPROFILE%\「开始」菜单\程序
ENVI $QuickLaunch=%USERPROFILE%\Application Data\Microsoft\Internet Explorer\Quick Launch
ENVI $Favorites=%USERPROFILE%\Favorites
ENVI $Startup=%USERPROFILE%\「开始」菜单\程序\启动
ENVI $SendTo=%USERPROFILE%\SendTo
ENVI $Personal=%USERPROFILE%\My Documents



只要写一条
ENVI $
即可。

而且,应该这样才比较好,因为这样 XCMD 会创建这些目录(如果不存在的话)。
并且,这句最好要在很前面,这样后面 注册 DLLInstall 才会成功。

再有:
TEXT 正在注册组件……
CALL SHELL32.DLL,DllInstall,#1,I
CALL BROWSEUI.DLL,DllInstall,#1,I
CALL SHDOCVW.DLL,DllInstall,#1,I

之后最好再来一句:
EXEC @=XCMD.EXE CALL SHELL32.DLL,DllInstall,#1,U
这样可以创建“显示桌面”的命令在快速启动栏上。不需要我们去创建的。不过这句会导致移动画面一闪,但是加了“@”用 EXEC来执行,就可以解决问题了——在后台桌面执行此命令。

上面说的这些东西,大家仔细看一下。特别是 DllInstall 这些东西,一定要在 ENVI $ 之后,在“TEXT 正在设定系统”那些东西之前,否则会有问题。
回复

使用道具 举报

6#
发表于 2007-1-23 14:53:24 | 显示全部楼层
原帖由 lxl1638 于 2007-1-23 01:23 AM 发表
快速启动栏位于深层多级目录,可能XCMD没有建立这个深层多级目录,本人刚试,若在IMG中事先建立这个目录,快速启动栏就出来了。

原因是不少PE的IMG内没有事先建立这个深层多级目录。

是否会建立这样的深层多 ...


可以递归创建目录,但关键是你们没有使用不带参数的 ENVI 命令。请使用不带参数的ENVI命令:

ENVI

ENVI $

各位请仔细看帮助
回复

使用道具 举报

7#
发表于 2007-1-23 15:02:43 | 显示全部楼层
原始短消息: 早上好,刚起床,又看一下 XCMD 2.0源码,找到了渐隐淡出的问题了。
原始短消息: 早上好,刚起床,又看一下 XCMD 2.0源码,找到了渐隐淡出的问题了。


若没有事先在IMG内建立 %USERPROFILE% 相应的目录的话,好象位于深层多级目录的快速启动栏不能建立,本人试过,若先建立快速启动栏目录的话,XCMD就会建立快速启动栏的快捷方式,若不建立那个目录的话,很多IMG(基于YY版修改的)无法建立快速启动栏的快捷方式。

现在正在想找建立多级目录的VC代码来试。

H:\Documents and Settings\用户名\Application Data\Microsoft\Internet Explorer\Quick Launch


我已经在你的贴子里面回复过了,现在又回复了一次。
请仔细查看我的说明。

另外 Quick Launch 目录我现在想想有点问题:

UStrCat(p, TEXT("\\Microsoft\\Internet Explorer\\Quick Launch"));

把这句末尾再加上一个 \\ 即可
UStrCat(p, TEXT("\\Microsoft\\Internet Explorer\\Quick Launch\\"));

这是因为我改动 UDirCreate后忘了更改这个调用。


但是我的 RXPE 中不会出现问题,是因为我注册了
EXEC @=XCMD.EXE CALL SHELL32.DLL,DllInstall,#1,U
这个会自动创建显示左面的命令,所以规避了这个问题。
回复

使用道具 举报

8#
发表于 2007-1-23 15:04:14 | 显示全部楼层
请老九更新一下,改掉这个 BUG,然后发布一个正式的版本吧。
回复

使用道具 举报

9#
发表于 2007-1-23 15:12:04 | 显示全部楼层
原帖由 lxl1638 于 2007-1-23 03:02 PM 发表


比如说什么时候或什么样的设置需要用到?
在XCDM中加?XCMD已不是控制台命令了,加上也没多大作用,因为可用内存是时刻变的,XCMD可以将可用内存写到注册表或环境变量,但你需要用到这些数据时,可能已发生了 ...


我有个想法没有去实现,不知道老九有没有兴趣:就是在命令前加上条件判断,决定是否执行。比如:

?Free(Mem)<64 PAGE C:\PageFile.sys 100
?Free(X:\)<2 FILE NTOSKNRL.EXE
?Exist(X:\Tools\WinRAR\WinRAR.exe) ***************

等等,条件判断可以增加,比如判断已经用了多少内存,有多少内存空闲,文件是否存在,磁盘可写空间有多少,分辨率是多少等等

支持== < <= > >= != 这几种比较操作符,和默认[==TRUE]的判断(如 Exist 函数)
回复

使用道具 举报

10#
发表于 2007-1-23 15:14:21 | 显示全部楼层
原帖由 lxl1638 于 2007-1-23 03:05 PM 发表


是的,本人调试时也发现UDirCreate会少建立一级目录。


因为新版本的 UDirCreate 改动过,但这处没改过来,导致这个问题。
不过 Link 命令似乎不会出现问题吧?

不过,如果 %USERPROFILE%目录已经创建的话,这个问题不会出现:

if (SHGetSpecialFolderPath(NULL, p, c_sMacro.iFolder, TRUE))

因为这里指定了会创建目录,不过我很莫名其妙的是 MS 的 SHGetSpecialFolderPathAPI竟然因为这种原因没能创建目录。

[ 本帖最后由 Yonsm 于 2007-1-23 03:21 PM 编辑 ]
回复

使用道具 举报

11#
发表于 2007-1-23 16:59:33 | 显示全部楼层
原帖由 triquan 于 2007-1-23 04:35 PM 发表


我发现PAGE是可能用环境变量%CurDrv%的,只要把命令列在外部xcmd.ini里,然后想在哪个分区设虚拟内存,就把列有PAGE命令的xcmd.ini和外置程序放在这个分区的根目录就行了。



所以说啦……
发挥自己想想享乐和推理能力,说实话这种用法我也没想到。
回复

使用道具 举报

12#
发表于 2007-1-23 17:03:15 | 显示全部楼层
原帖由 wchf2 于 2007-1-23 04:39 PM 发表
唯一不爽的是"关机"与"重起"命令失效


这个,可以尝试一下 EXEC $ 加载 Shell,如果 Shell 不是Exeplorer.exe,可以修改退出代码处,让它执行 ExitWindowsEx(会转到调用 XCMD SHUT,不会改的话,可以给我看看), Shell
回复

使用道具 举报

13#
发表于 2007-1-23 17:52:40 | 显示全部楼层
原帖由 zhaohj 于 2007-1-23 05:27 PM 发表


出现循环加载XCMD.INI的情况,可能不是这样的,是不是没有出现桌面?应该是EXEC $%SystemRoot%\\EXPLORER.EXE,在原版RXPE目录下没有EXPLORER.EXE吧,所以一直在等这个命令执行,改成EXEC $%SystemRoot%\syet ...


没有执行成功不会等待的。
另外,EXEC 会自动搜索路径的。

递归调用是因为 LOAD 命令发生改变了,我特地在新版本用用红色说明了变化。
最好不要再用 LOAD XCMD.INI 这样的,而是改成 LOAD \XCMD.INI,或者 LOAD \外部程序\XXX.INI 等等
回复

使用道具 举报

14#
发表于 2007-1-23 21:15:49 | 显示全部楼层
原帖由 l1982012800 于 2007-1-23 08:32 PM 发表
求助老九,为什么我的开始/程序中是空的


// 设置系统用户文件夹路径
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common AppData=%ALLUSERSPROFILE%\Application Data
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Desktop=%ALLUSERSPROFILE%\桌面
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Favorites=%ALLUSERSPROFILE%\Favorites
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Programs=%ALLUSERSPROFILE%\「开始」菜单\程序
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Start Menu=%ALLUSERSPROFILE%\「开始」菜单
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Startup=%ALLUSERSPROFILE%\「开始」菜单\程序\启动
//REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Templates=%ALLUSERSPROFILE%\Templates
回复

使用道具 举报

15#
发表于 2007-1-23 21:44:55 | 显示全部楼层
原帖由 zero99 于 2007-1-23 09:37 PM 发表
用老九的120M版本使用 “XCMD V2.0修改加强版” 或 “XCMD原版” 代替“XPEINIT.EXE”,“XPELOGON.EXE”,“XPESET.EXE”改造,在 XCMD.INI 里面加了 EXEC $%SystemRoot%\EXPLORER.EXE 语句,Ctrl+Alt+Del 是可 ...


如果有问题,替换一下 USER32.dll 试试看——替换成老九或RXPE里面的
回复

使用道具 举报

16#
发表于 2007-1-25 14:05:54 | 显示全部楼层
原帖由 lxl1638 于 2007-1-25 11:22 AM 发表


算不了什么,XCMD 就一个,本区的WinPE才会让人头晕!
太多了,无非就是光棍版或YY版修改一个配置文件,或换一个Logon程式,一个新的XPE就面世了!
光棍版的源头也是老九WinPE修改而成的,一年前在中关村就 ...

哈哈,大家都想搞自己的 PE,改头换面一下。想去研究一下里面的东西或者踏踏实实做点贡献的真不容易。就说网卡驱动,过了这么久也没有一个真正很完美的驱动包出来。
回复

使用道具 举报

17#
发表于 2007-1-26 01:17:46 | 显示全部楼层
HoHo~~又有新功能了

指正不敢当了,不过下面的代码可以精简一下的:
        if (UDirExist(ptzCmd))
        {
                UStrPrint(tzPath, TEXT("%s\\*.*"), ptzCmd);
        }
        else
        {
                UStrPrint(tzPath, TEXT("%s"), ptzCmd);
                UDirSplitPath(ptzCmd);
        }

        HANDLE hFind = FindFirstFile(tzPath, &fd);


改为

        if (UDirExist(ptzCmd))
        {
                UStrCat(ptzCmd, TEXT("\\*")); // 如果确实想查找有扩展名的文件,换成 *.*
        }

        HANDLE hFind = FindFirstFile(ptzCmd, &fd);
        UDirSplitPath(ptzCmd);


另外我说今天给你发什么文档,跑回来一看竟然不是最新的,还是明天吧。晕了。

[ 本帖最后由 Yonsm 于 2007-1-26 01:19 AM 编辑 ]
回复

使用道具 举报

18#
发表于 2007-1-26 01:23:23 | 显示全部楼层
另外,老九,如果你用VC6编译的话,EXIF/IFEX命令中判断内存的功能,如果遇到机器的内存大于 4G,将会肯定无法执行该 IF 命令。
因为GlobalMemoryStatusEx我定义成了没有 Ex 的。
回复

使用道具 举报

19#
发表于 2007-1-26 01:39:59 | 显示全部楼层
原帖由 lxl1638 于 2007-1-26 01:29 AM 发表


先谢过!
用VC处理字符串是本人学VC的弱点,UStrCat是将字符串连接到后面?
判断内存的功能放心,本人是直接从VS2005的帮助文件中Copy代码下来用的,实在找不到类似功能的代码,再查Delphi的相关单元文件(相 ...


还没睡?
C/C++ 中字符串的可用函数或类或template是很多的(CRT、WinAPI、ShellAPI、SecureStringAPI、MFC CString、STL String 等等都可以用),有时候都不知道选择什么好。最终我的方案是使用自己的一套名称,到底使用什么,看 UniBase 的实现,作为一层跨平台的通用 Platform API(实现各异,接口一致)。

至于使用,字符串操作其实很简单,就这么几个用习惯了就好了:

UStrLen
UStrCopy
UStrPrint
UStrCmp
UStrChr
UStrStr
UStrCat
其它的(UStrToAStr、UStrRep、UStrToInt、UStrFromInt),要用的时候再看罗……
回复

使用道具 举报

20#
发表于 2007-1-26 15:28:38 | 显示全部楼层
老九看看能不能加入这一段,使IFEX支持按键检测:

  1.                 // 增加按键检测
  2.                 if ((ptzCmd[0] == '0') && ((ptzCmd[1] == 'X') || (ptzCmd[1] == 'x'))
  3.                 {
  4.                         BOOL bPress = (GetAsyncKeyState(UStrToInt(ptzCmd)) & 0x8000) ? TRUE : FALSE;
  5.                         uRes = (bPress == bCmp);
  6.                 }
  7.                 else
  8.                 {
  9.                         // 下面是老的代码
  10.                         WIN32_FIND_DATA fd;
  11.                         HANDLE hFind = FindFirstFile(ptzCmd, &fd);
  12.                         if ((hFind != INVALID_HANDLE_VALUE) == bCmp)
  13.                         {
  14.                                 uRes = TRUE;
  15.                                 FindClose(hFind);
  16.                         }
  17.                 }
复制代码


用法举例:IFEX 0x12,DEVI \Windows,Display
用法说明:如果按下 Alt,则自动从本地硬盘上的\Windows中搜索显卡驱动

我就懒得去更新了。

[ 本帖最后由 Yonsm 于 2007-1-26 03:31 PM 编辑 ]
回复

使用道具 举报

21#
发表于 2007-1-26 15:34:02 | 显示全部楼层
原帖由 Climbing 于 2007-1-26 08:22 AM 发表
我提些建议:

关于page命令:一般来说,我们启动PE都是用来进行系统维护的,而原机器上一般都装有xp等系统,而原来的系统一般都会有pagefile.sys,我们应该尽可能的避免pe启动时往硬盘上写入新增的文件(因为如 ...



现在就大概能实现的,不过需要多两句话:
IFEX MEM<32,IFEX C:\PageFile.sys,PAGE C:\PageFile.sys 100
IFEX MEM<32,IFEX D:\PageFile.sys,PAGE E:\PageFile.sys 100
IFEX MEM<32,IFEX E:\PageFile.sys,PAGE D:\PageFile.sys 100
IFEX MEM<32,IFEX F:\PageFile.sys,PAGE F:\PageFile.sys 100
回复

使用道具 举报

22#
发表于 2007-1-26 15:35:23 | 显示全部楼层
原帖由 lxl1638 于 2007-1-26 02:19 PM 发表
外置配置文件的位置完全可以自行定义,慢慢看吧。
本人的看法,固定一份内置是必要的,即使没有外置或外置给菜菜改错了,这样的系统还能顺利启动。在内置中可以引用外置,但为了避免重复引用,就 LOAD 外置即可, ...


并非 DLL 什么的原因,只要把Init的功能单独放在一个EXE中就行了。你马上就可以试试看。
回复

使用道具 举报

23#
发表于 2007-1-28 03:12:36 | 显示全部楼层
既然这么多人说源码,就把整个工程贴出来吧。也好有个参考。XCMD说明文件中的最后的许可中也这样说了。
"◎ 如果您使用或修改了其中任何的源代码,则必须把使用这些源代码的项目以及项目内的所有源代码和文档公开。否则禁止使用本程序源代码的任何部分。"heihei
不过我建议新搞的可以自己修改说明之类的,包括作者信息,这没什么关系。但我觉得关键是继续把你的成果共享下去。养成好习惯良性循环。反正用的人越多,越有成就感麻。
回复

使用道具 举报

24#
发表于 2007-1-29 20:21:39 | 显示全部楼层
Goto 容易实现,不要使用行号,而使用标号。

GOTO Label1

:Label1


g_ptzNextLine
HRESULT Goto(PCTSTR ptzCmd)
{
    PCTSTR p = USrtStr(g_ptzNextLine, ptzCmd);
     if (p)
    {
       g_pNextLine = NEXTLINE(p);
      return S_OK;

    }
    return 未找到;
}
回复

使用道具 举报

25#
发表于 2007-2-9 10:14:04 | 显示全部楼层
老九兄帮助做的真好!帮助文件用什么工具编辑的,不会手动敲进去的吧?
什么文本编辑器这么棒?推荐一下
回复

使用道具 举报

26#
发表于 2007-3-2 20:00:24 | 显示全部楼层
我回来了,看了一下 _SUB _END CALL,真棒!
有了子程序调用的命令,配置文件好看多了……
回复

使用道具 举报

27#
发表于 2007-3-31 17:56:08 | 显示全部楼层
老九努力,成果不少,赞一个
回复

使用道具 举报

28#
发表于 2007-4-8 11:01:59 | 显示全部楼层
老九现在非常极其熟悉了非Delphi了:)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-19 23:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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