无忧启动论坛

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

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

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


先谢过!
用VC处理字符串是本人学VC的弱点,UStrCat是将字符串连接到后面?
判断内存的功能放心,本人是直接从VS2005的帮助文件中Copy代码下来用的,实在找不到类似功能的代码,再查Delphi的相关单元文件(相当于VC的头文件),看一下它是如何调用Windows API工作的,所以本人的VC离不开Delphi的影,始终有Pascal的风格。
回复

使用道具 举报

32#
 楼主| 发表于 2007-1-26 12:20:56 | 显示全部楼层
原帖由 triquan 于 2007-1-26 11:21 AM 发表


我觉得这样发即方便,又合理,又科学,又严谨!理由如下:

第一:内置是必须的,不能少!因为万一出现外置的配置文件损坏或找不到,或外置程序被删等的情况时,由于PE有了内置,已经是自成一体,完全可以不 ...



言之有理,1楼的内置配置文件是针对IMG内的程序而定义的,即使丢掉外置程序,或外部配置文件不存在,或有错,这个PE都可以完全启动。换句话说,修改这个PE,只需修改外置配置,也建议只修改外置配置文件即可。
回复

使用道具 举报

33#
 楼主| 发表于 2007-1-26 12:27:29 | 显示全部楼层
原帖由 l1982012800 于 2007-1-26 11:41 AM 发表
有两个问题未解决,一个是安装驱动要求签名,第二个是桌面背景不是加载


1、取消安装未经签名的驱动程序警告,是下面几行,必须放在注册SHELL32.DLL等后面,因为注册这几个DLL时某些键值可能复原。


  1. TEXT 正在注册组件……
  2. CALL SHELL32.DLL,DllInstall,#1,I
  3. CALL BROWSEUI.DLL,DllInstall,#1,I
  4. CALL SHDOCVW.DLL,DllInstall,#1,I
  5. EXEC @=XCMD.EXE CALL SHELL32.DLL,DllInstall,#1,U

  6. //注册组件与取消安装未经签名的驱动程序警告之间最好有几行其它作过渡。

  7. TEXT 取消安装未经签名的驱动程序警告……
  8. REGI HKCU\Software\Microsoft\Driver Signing\Policy=@0
  9. REGI HKLM\Software\Microsoft\Driver Signing\Policy=@0
  10. REGI HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\PrivateHash=@0x22 0x9E 0x53 0x3E 0x5D 0x08 0xAB 0xC8 0x77 0x1D 0xB9 0xD0 0xE6 0x06 0xA8 0x06
复制代码


2、设置Wall必须在加载桌面之前,环境变量设定之后。

[ 本帖最后由 lxl1638 于 2007-1-26 12:28 PM 编辑 ]
回复

使用道具 举报

34#
 楼主| 发表于 2007-1-26 12:38:55 | 显示全部楼层
大内存的机子不存在页文件问题,因为PAGE命令会判断可用内存的数量,当可用内存足够时PAGE命令不会设置页文件的。
下面是PAGE命令的参数及说明:

  1. PAGE <页文件名>   <初始值(最小值)>   [最大值]
复制代码

1、当 可用内存 > 初始值时 ,执行上面的 PAGE 命令不会设置页文件。或者说 可以定义初始值的大小来控制设置页文件的条件。
2、可以启动后执根据具体情况来设置页文件,这个最好手动操作。
回复

使用道具 举报

35#
 楼主| 发表于 2007-1-26 14:19:46 | 显示全部楼层
外置配置文件的位置完全可以自行定义,慢慢看吧。
本人的看法,固定一份内置是必要的,即使没有外置或外置给菜菜改错了,这样的系统还能顺利启动。在内置中可以引用外置,但为了避免重复引用,就 LOAD 外置即可,反对在外置中LOAD内置,这样可能会出现混乱。
说明以后再慢慢完善,目前尽可能将功能完善再说。下来的任务还是完善功能,之后再做说明,最后有可能的话,XCMD 只保留最基本功能,尽可能将其它部分做到DLL中,希望能降低启动的内存要求。
回复

使用道具 举报

36#
 楼主| 发表于 2007-1-26 19:14:24 | 显示全部楼层
原帖由 emca 于 2007-1-26 05:45 PM 发表
既然支持外挂字体,我尝试在配置文件中添加 FONT C:\Windows\Fonts\*.* ,结果中途停止响应,估计是硬盘上的字体太多的缘故!
于是尝试分别注册硬盘系统中的黑体、宋体、仿宋等常用字体,结果成功。因此我们既可 ...


1、命令改为
FONT C:\Windows\Fonts
试试。
2、确定PE启动后的C:的确存在 Windows\Fonts 这个字体目录,本人的PE启动后,原Windows系统在D:盘,经试验一条命令即可将所有字体注册成功。本人在外部配置文件中使用的命令是
FONT D:\Windows\Fonts

当然这样的命令还不够完善,要自动注册字体的话要全盘查找,且系统的目录不一定是 Windows (可能是 WinNT 或 WinXP 或 Windows XP 或 Windows 2003 等等),总之,目录注册硬盘上系统的字体必须确定其路径,若把字体放在外置目录下就容易些。

下面是本人成功注册硬盘上的字体结果:

未命名.PNG (390.08 KB, 下载次数: 229)

未命名.PNG
回复

使用道具 举报

37#
 楼主| 发表于 2007-1-26 19:25:43 | 显示全部楼层
原帖由 沙漠之子 于 2007-1-26 04:59 PM 发表
虽然1.25版支持外挂字体,不过我还是想知道原理的说


一条 API 命令 AddFontResource(字体资源名含路径) ,这条 API 函数很好理解,Add Font Resource 意为加入字体资源,另一个 API 函数可能不需要,不过还是加上了,就是 SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0),它的意思是向 HWND_BROADCAST 投递一条消息,通知字体资源发生变化(WM_FONTCHANG)。
回复

使用道具 举报

38#
 楼主| 发表于 2007-1-26 20:18:41 | 显示全部楼层
原帖由 沙漠之子 于 2007-1-26 08:12 PM 发表

刚才通过反编译也查到两条api命令AddFontResource和CreateFont,在fontreg.exe还查到RemoveResource

本人没有这方面的知识,不知以下命令是否正确

rundll32.exe gdi32.dll,AddFontResource 路径

来注册, ...


AddFontResource函数是在FONT命令中用的,CreateFont函数是在TEXT命令中用的(TEXT命令可以设置字体大小正是因为用了它)。
启动后能否注册成功,本人就不管了,反正在启动过程中读解配置文件能注册字体就行了。
回复

使用道具 举报

39#
 楼主| 发表于 2007-1-26 23:29:20 | 显示全部楼层
原帖由 沙漠之子 于 2007-1-26 08:34 PM 发表

启动后注册,虽字体能识别到,但无法使用字体

需要将字体信息(含字体路径)导入到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts


????可以与注册表有关,本人的都可以,1楼特别发了一幅图。我再试一次
回复

使用道具 举报

40#
 楼主| 发表于 2007-1-26 23:59:52 | 显示全部楼层
注册硬盘上的字体问题本人无法了解,因为没有遇到此现象,本人的PE在启动过程中注册硬盘上的字体时的确是停3~4秒,硬盘灯闪几下,之后就很快启动了。

不能认识字体的问题本人也同样无法知道,因为没有遇到此现象,本人的很成功,一楼帖了幅图,一切字体都可用,虽然选择某些鬼佬的字体是中文是乱码(此仍正常现象),但所有英文的字体均有变化。

字体问题可能与原本的注册表有关,或者本人手头上这个YY版的确是很YY,完美支持外挂字体,明天吧,我把YY版重发一次,让高手分析个中的原因。

[ 本帖最后由 lxl1638 于 2007-1-27 12:01 AM 编辑 ]
回复

使用道具 举报

41#
 楼主| 发表于 2007-1-27 00:06:40 | 显示全部楼层
VB 编的啊,要 VB 运行库。
能不能帖源码上来,用其它的编试试。VB 运行库太大了。
回复

使用道具 举报

42#
 楼主| 发表于 2007-1-27 12:06:19 | 显示全部楼层
安装字体不正常的,请用1楼的XPSP2RES.DLL试试。
回复

使用道具 举报

43#
 楼主| 发表于 2007-1-27 13:42:23 | 显示全部楼层
原帖由 zhaohj 于 2007-1-27 12:30 PM 发表

发送是不是中断了?只上传了一点点,我把它删了,你再重发吧!


还没发,现在在搞 XCMD。想增强一下 IFEX 命令:

IFEX  <条件> , [命令1] [!命令2]
<条件>成立,执行 [命令1],反之,执行 [命令2]

这条命令可以认为是:
if <条件> 命令1
else 命令2


<条件>可以是内存,格式为 MEM>XXX 或 MEM<XXX 或 MEM=XXX 或 MEM ! XXX 这样的形式
<条件>也可是磁盘,格式为 R:\>XXX 或 R:\<XXX 或 R:\=XXX 或 R:\ ! XXX 这样的形式
<条件>也可是按键,格式为 KEY=XXX 或  KEY ! XXX 这样的形式
回复

使用道具 举报

44#
 楼主| 发表于 2007-1-27 21:43:14 | 显示全部楼层
更新了,上来让大家认识认识。
回复

使用道具 举报

45#
 楼主| 发表于 2007-1-27 22:52:19 | 显示全部楼层
IFEX、FONT命令的源码已帖了一次,只是一楼文字太多了,所以暂时不帖了。
也很简单,如命令组为:
命令1|命令2|命令3|命令4|命令5

则分解为两部分, 命令1 和 后面的命令组(命令2|命令3|命令4|命令5),先执行 命令1,再将 后面的命令组(命令2|命令3|命令4|命令5)递归,直到命令组内没有命令为止。

译成中文就是这样:

  1. 执行命令组的函数名(参数  命令组字符串)
  2. {
  3.        从命令组字符串分解出命令1;
  4.        如果存在 命令1
  5.        {
  6.                执行命令1;
  7.                执行命令组的函数名(余下的命令组字符串); //这里是递归,算法很简单,也没有必要帖一次。
  8.        }
  9. }
复制代码

[ 本帖最后由 lxl1638 于 2007-1-27 11:58 PM 编辑 ]
回复

使用道具 举报

46#
 楼主| 发表于 2007-1-27 23:09:08 | 显示全部楼层
原帖由 123 于 2007-1-27 11:04 PM 发表
我的意思是,那些命令是通过调用什么函数修改注册表的哪些地方实现的?我猜安装字体是调用AddFontResource函数。


不错,安装字体命令的源码已帖在1楼差不多两天了,原作者也看过,讨论过,今晚才删的,1楼的文字太多,源码帖过了,原作者也认为没有什么大问题我就删了一楼的部分内容。关心源码的人很少,关心如何使用的人很多,所以一些对一般人来说与使用无关的文字我还要及早删。

[ 本帖最后由 lxl1638 于 2007-1-27 11:11 PM 编辑 ]
回复

使用道具 举报

47#
 楼主| 发表于 2007-1-27 23:21:18 | 显示全部楼层
以后还是要统一的,要么就用字符,要么就用数值,若要支持两者,必须将其中一方加 ' 号或 " 号括起来,
如数值直接用数值表示,字符则用 '字母' 表示,如 'a' ,但如象 F1~F12、Ctrl、Alt等都要用字符表示的话,要定义一大堆数据了。
回复

使用道具 举报

48#
 楼主| 发表于 2007-1-27 23:26:09 | 显示全部楼层
HRESULT RegFont(PTSTR tzPath)
{
        WIN32_FIND_DATA fd;
        TCHAR szFullPathName[MAX_PATH];
        HRESULT hResult=ERROR_FILE_NOT_FOUND;

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

        if (hFind != INVALID_HANDLE_VALUE)
        {       
                do
                {
                        if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
                        {                               
                                UStrPrint(szFullPathName, TEXT("%s\\%s"), tzPath,fd.cFileName);
                                AddFontResource(szFullPathName);
                        }
                }
                while (FindNextFile(hFind,&fd));
               
                FindClose(hFind);
                hResult = (HRESULT) SendMessage(HWND_BROADCAST,WM_FONTCHANGE, 0, 0);       
        }

        return hResult;
}

///////////////////////////////////////////////////////////
//REG FONT
HRESULT Font(PTSTR ptzCmd)
{
        TCHAR tzPath[MAX_NAME];
        HRESULT hResult=ERROR_FILE_NOT_FOUND;

        if (ptzCmd[0] == '\\')
        {
                ptzCmd++;
                TCHAR tzDrives[MAX_NAME];               
                GetLogicalDriveStrings(MAX_NAME, tzDrives);
                for (PTSTR p = tzDrives; *p; p += UStrLen(p) + 1)
                {
                        UStrPrint(tzPath, TEXT("%s%s\\Fonts"), p, ptzCmd);
                        if (UDirExist(tzPath))
                        {
                                UStrCat(tzPath, TEXT("\\*.*"));
                                hResult = RegFont(tzPath);
                        }
                }

        }
        else
        {
                if (UDirExist(ptzCmd)) UStrCat(ptzCmd, TEXT("\\*.*"));
                UStrPrint(tzPath,TEXT("%s"),ptzCmd);
                UDirSplitPath(ptzCmd);
                if (UDirExist(ptzCmd))
                {
                        hResult = RegFont(tzPath);
                }
        }
        return hResult;
}

[ 本帖最后由 lxl1638 于 2007-1-27 11:27 PM 编辑 ]
回复

使用道具 举报

49#
 楼主| 发表于 2007-1-27 23:31:25 | 显示全部楼层
单个字母好办,难就是那控制键,如F1~F12、Ctrl、Alt、Shift、End、Home、Del等一大堆。
回复

使用道具 举报

50#
 楼主| 发表于 2007-1-28 00:35:40 | 显示全部楼层
原帖由 strongchen 于 2007-1-27 11:30 PM 发表
不懂编程,不过支持开发代码(使用者自觉保留作者信息)

XCMD我会保留原作者的信息的,到目前说明文件都没改动。不象以前有些人把XPEHELP.EXE改得面目全非。
另一方面,无忧的WinPE有几个不是从老九WinPE修改而成的?又有几个能保留原制作人的信息的?
回复

使用道具 举报

51#
 楼主| 发表于 2007-1-28 14:29:01 | 显示全部楼层
一楼已说明,字体完全可以外置,也可以利用硬盘上原有的Windows字体。
比如你的Windows字体在 硬盘的 Windows\Fonts 目录下(那个分区都行),FONT 命令的参数则为 :
FONT \Windows
它会查找硬盘的所有分区的  Windows\Fonts 目录,并安装字体,若不明的建议下载1.27的YY版看看,看明了再定义自己的PE。
回复

使用道具 举报

52#
 楼主| 发表于 2007-1-28 16:21:29 | 显示全部楼层
有所不同,1月.27日YY版IMG中的XCMD有一条命令SHEL,修改版工程源码中没有这个命令。
加入这个命令的目的是为以后锁定SHELL作准备。
你将 XCMD.INI中 SHEL 改为 EXEC 命令试试。
回复

使用道具 举报

53#
 楼主| 发表于 2007-1-28 19:36:08 | 显示全部楼层
基本的字体还是要有的,TEXT命令本身要有默认的字体支持(下面的第二条命令,第1条命令是本人加上去的,支持设置字体的大小)。

hfont = CreateFont(fontsize, 0, 0, 0, 400, 0, 0, 0,
        ANSI_CHARSET, OUT_DEFAULT_PRECIS,
        CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
        DEFAULT_PITCH | FF_DONTCARE, TEXT("Tahoma"));

(hfont ? SelectObject(ps.hdc, hfont): SelectObject(ps.hdc, GetStockObject(DEFAULT_GUI_FONT)));


移动,复制命令是应该是 -}、=},这个是2.0版的说明,但2.2版变成了,->、=>,究竟是那个才对,本人还没看源码,或者你试试用2.0版的语法。

[ 本帖最后由 lxl1638 于 2007-1-28 07:41 PM 编辑 ]
回复

使用道具 举报

54#
 楼主| 发表于 2007-1-28 19:57:03 | 显示全部楼层
原帖由 songq 于 2007-1-28 07:55 PM 发表
跟我想象的不一样,我还以为img又可以减掉2M的大小呢。

保留英文字体,先删中文字体试试,只是TEXT命令不能用中文了。
回复

使用道具 举报

55#
 楼主| 发表于 2007-1-28 20:28:28 | 显示全部楼层
可能没有中文字体是不行的,第一次设置字体大小是用simtun,考虑到XCMD可能要支持更多的系统(如繁体版PE),就换成了Tahoma字体,因为这个字体在所有系统中都要有的。
到此也不打算换成simtun,目的是以后若有人做繁体版PE要用这个工具时能用得上。
回复

使用道具 举报

56#
 楼主| 发表于 2007-1-29 11:23:12 | 显示全部楼层
原帖由 zts59 于 2007-1-29 08:18 AM 发表
休息了一天回来又更新了,辛苦了lxl1638.

有一建议,不知道合不合适:

有了IFEX,能否再搞个LINE  N
其目的,是跳到当前INI文件哪一行来执行呢?

见笑了。


暂时觉得有困难,不过可以这样解决:

IFEX <条件>,LOAD XXXX.INI!LOAD YYYY.INI

符合条件的 LOAD XXXX.INI 文件,否则 LOAD YYYY.INI 文件。你可以把这些 .INI 文件看成是命令集。
回复

使用道具 举报

57#
 楼主| 发表于 2007-1-29 11:50:43 | 显示全部楼层
在 Unicode 的 VC 中几乎没有字符串数组这样的概念,所有对字符串的操作都是指针操作,或者 CString 类更直观一些,因初学 VC 很多基础东西都没了解,以后再慢慢搞,先补习一下 VC 基础知识再说。
回复

使用道具 举报

58#
 楼主| 发表于 2007-1-29 13:11:42 | 显示全部楼层
晕,试下不就知道了。
那些字体是本人随便从Windows中找几个特大的文件(大的一般是中文字体)复制过去的,目的不是要大家使用这些字体,而是试验安装外挂字体用的,也可以说是一个示例。
当你把PE安装到硬盘上时完全可以不要这些字体,直接利用硬盘中Windows的字体,若PE是在光盘中,这些字体就按需选择吧。

[ 本帖最后由 lxl1638 于 2007-1-29 01:25 PM 编辑 ]
回复

使用道具 举报

59#
 楼主| 发表于 2007-1-29 20:25:18 | 显示全部楼层
没有返回的GOTO很容易引起混乱。试试看。
回复

使用道具 举报

60#
 楼主| 发表于 2007-2-1 21:56:47 | 显示全部楼层
原帖由 zts59 于 2007-2-1 09:43 PM 发表
lxl1638 :

1、可能是你的PAGE命令智能过度了,

是不是内存达到512M,就不会建立页面文件了?

我在真机上测试512M,页面文件怎么也建立不出来。
手动执行:XCMD PAGE C:\PAGEFILES.SYS 128 128
C盘没有 ...



在你的命令中
XCMD PAGE C:\PAGEFILES.SYS 128 128
当可用内存>128M时就不会建立页文件的,还有128M以上的可用内存,没有必要建立页文件。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-18 09:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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