无忧启动论坛

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

程式菜单应用技术举例:参数化菜单功能调用

[复制链接]
跳转到指定楼层
1#
发表于 2010-2-18 18:53:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参数化菜单功能调用可方便用户DIY。


同一菜单项可以启动不同的ISO。

菜单通用,同一菜单适合于:
硬盘、光盘、移动硬盘、USB-CDROM、USB-HDD、USB-ZIP和UD等本地启动情形。
也可直接用于网启部署。


请过目#1至#3楼。

[ 本帖最后由 pseudo 于 2010-2-19 17:12 编辑 ]
2#
 楼主| 发表于 2010-2-18 18:54:20 | 只看该作者

0PEv1.0.7参数化菜单功能调用举例.rar--独立通用F6模块--0PE零体积版

;参数化菜单功能调用举例  by Pseudo 2010.2.10
;参数化菜单功能调用可方便用户DIY。
;此菜单通用同一菜单适合于:
;硬盘、光盘、移动硬盘、USB-CDROM、USB-HDD、USB-ZIP和UD等本地启动情形。
;也可直接用于网启部署。
;如[2][3][4]菜单项所示,0PE同一菜单项可以启动不同的ISO
;此菜单仅作示例,使用者应在理解基础上DIY。
;提醒:
;合盘使用适当的新版Grub4Dos,例如0PE v1.0.7需使用grub4dos-0.4.5a-2010-02-09.zip
;应使用英文版grldr,可通过gfxmenu实现中文界面。
checkrange 0x21 read 0x8280 && pxe detect NotExist
timeout 8
default 0
cat --length=0 ()/0PE/MENU.0PE || find --set-root /0PE/MENU.0PE
#假定MESSAGE与MENU.0PE在同一个盘(分区)
gfxmenu /MESSAGE
title         [0]    0PE原版菜单
configfile /0PE/MENU.0PE
title         [1]    直接启动0PE
#这行表示绕过0PE第一菜单界面,直接调用其菜单项
write 0x60300 0x60300
#这行指定调用0PE第1菜单项
write 0x60100 1
configfile /0PE/MENU.0PE
title         [2]    启动ISO例一(PE)
#这样启动ISO可找到硬盘和外置工具
write 0x60300 0x60300
#调用0PE第3菜单项,默认名串/PE.ISO
write 0x60100 3
#可自行指定ISO名串
write (md)0x301+1 /ISO/LMT911PE.ISO
#指定串/ISO/LMT911PE.ISO长为17个字符
write 0x60360 17
configfile /0PE/MENU.0PE
title         [3]    启动ISO例二(控制台)
#这样启动ISO可找到硬盘不蓝屏
write 0x60300 0x60300
write 0x60100 3
write (md)0x301+1 /ISO/XP_CON.ISO
#指定串/ISO/XP_CON.ISO长为15个字符
write 0x60360 15
configfile /0PE/MENU.0PE
title         [4]    启动ISO例三(安装盘)
#这样启动ISO可找到硬盘不蓝屏
write 0x60300 0x60300
write 0x60100 3
write (md)0x301+1 /ISO/XP_SP3.ISO
write 0x60360 15
configfile /0PE/MENU.0PE
title         [5]    串接用户菜单
write 0x60300 0x60300
write 0x60100 4
configfile /0PE/MENU.0PE
title         [6]    USB2.0加速模块(常死机)
write 0x60300 0x60300
write 0x60100 7
configfile /0PE/MENU.0PE
title         [7]    KonBoot绕口令模块
#for 2K/XP/2K3/VISTA/2K8
write 0x60300 0x60300
write 0x60100 8
configfile /0PE/MENU.0PE
title         [8]    交换磁盘hd0、hd1顺序
write 0x60300 0x60300
write 0x60100 11
configfile /0PE/MENU.0PE
title         [9]   激活分区(hd0,0)
#U启时往往U盘、硬盘分别对应hd0,hd1,这时要激活硬盘分区可先交换磁盘hd0,hd1顺序。
write 0x60300 0x60300
write 0x60100 12
configfile /0PE/MENU.0PE
title         [10]  整体启动全内置0PE
#ANYNAME.ISO由0PE.ISO改名而来,不用改结构就直接可当全内置PE。
#全内置U启慢(但U启后可拔盘)、耗内存(整个ISO要载入内存)。
#增加ISO里面的外置工具不用动内核,但ISO体积越大越占启动内存。
#可考虑将部分内核、外置工具组件移到ISO外减小ISO体积。
cat --length=0 ()/ANYWHERE/ANYNAME.ISO || find --set-root /ANYWHERE/ANYNAME.ISO
map --mem /ANYWHERE/ANYNAME.ISO (0xff)
map --hook
chainloader (0xff)
title         [11]  整体启动全外置0PE
#0PE.ISO须放入0PE目录,并处于可见分区。可以找到ISO里外置工具。
#如果ISO在磁盘上是连续存放的,将比全内置方式U启快、省内存,ISO里面的外置工具体积可无限增加
#如果不连续存放,则整个ISO要载入内存。可考虑将部分内核、外置工具组件移到ISO外减小ISO体积。
cat --length=0 ()/0PE/0PE.ISO || find --set-root /0PE/0PE.ISO
map /0PE/0PE.ISO (hd32) || map --mem /0PE/0PE.ISO (hd32)
map --hook
chainloader (hd32)
title         [12]  启动Windows XP/2K3
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr



注意:

类似这样启动老毛桃原版PE是不行的:
title         [2]    启动PE的ISO
map --mem /ISO/LMT911PE.ISO (0xff)
map --hook
chainloader (0xff)
启动后会是没有外置工具的裸PE。

类似这样启动安装盘ISO是不行的:
title         [4]    启动安装盘ISO
map --mem /ISO/XP_SP3.ISO (0xff)
map --hook
chainloader (0xff)

启动后可能找不到硬盘,并且注定蓝屏死机没商量。

===========
0PEv1.0.7参数化菜单功能调用举例.rar,体积10M。含XP控制台XP_CON.ISO(8M)、0PE零体积版(兼作通用独立F6模块),支持参数调用(被调用的iso自行加入,目录、文件名可DIY,菜单项可自行增减)。
下载信息将在这里提供。
===========

驱动注入——避免某些XP/2003系统因为缺少SRS驱动而蓝屏(例如GHOST后重启蓝屏)


安装原版windows XP/2003的ISO可找到硬盘不蓝屏


[ 本帖最后由 pseudo 于 2010-3-21 14:48 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2010-2-18 18:55:10 | 只看该作者

程式菜单应用技术

0PE最早发明程式菜单应用技术,把菜单当成程序。这个参数化调用就是程式菜单的一种应用。

chenall兄最近增强了grub4dos的功能,使得程式菜单更强大、方便。

预期今后会有更多人使用程式菜单技术,虎年将是程式菜单普遍应用的一年。本帖说不定是这种普及的里程碑。


原帖由 zhaohj 于 2010-2-19 15:22 发表
#这行表示绕过0PE第一菜单界面,直接调用其菜单项
write 0x60300 0x60300
#这行指定调用0PE第1菜单项
write 0x60100 1
P大解析一下内存变量的含义

下面做些解释:

一、穿越(绕过)菜单界面直接选中菜单项

普通直接用configfile /0PE/MENU.0PE就可调用0PE的专用菜单,进入0PE第一菜单界面。
现在先写上
write 0x60300 0x60300
write 0x60100 <菜单项序号>
就把特定数据写入特定内存位置。将来执行MENU.0PE时,可以通过
checkrange 0x60300 read 0x60300 && timeout 0
checkrange 0x60300 read 0x60300 && default 16
来检查内存该处的数据是否特定数据。如果不是,就按普通情形处理;如果是,那么特殊处理:
1、设置延时为0,使得0PE第一菜单界面一闪而过,等效于绕过该界面。
2、设置默认菜单项为第16项,该菜单项里,通过
checkrange <菜单项序号> read 0x60100 && fallback <菜单项序号>
fallback Force
转入与<菜单项序号>对应的菜单项,其效果相当于用户在0PE第一菜单界面选中了该菜单项。

二、参数传递

上述<菜单项序号>就可以看作数值参数。前面已经介绍了如何使用该参数,下面介绍更具普遍性的字符串参数传递。
write (md)0x301+1 <ISO文件名串>
write 0x60360 <串长>
这两行把字符串参数信息写入内存特定位置....(待续)

[ 本帖最后由 pseudo 于 2010-2-19 17:04 编辑 ]
回复

使用道具 举报

4#
发表于 2010-2-18 19:14:14 | 只看该作者
0PE出到1.07了吗?
回复

使用道具 举报

5#
发表于 2010-2-18 19:15:06 | 只看该作者
希望能像小马PE一样 从PE中可以提取维护版

[ 本帖最后由 ddaiqq 于 2010-2-18 20:57 编辑 ]
回复

使用道具 举报

6#
发表于 2010-2-18 20:54:00 | 只看该作者
先点位,慢慢学习吸收吧!感谢P大做出的贡献!
回复

使用道具 举报

7#
发表于 2010-2-18 21:21:56 | 只看该作者
原帖由 ddaiqq 于 2010-2-18 19:15 发表
希望能像小马PE一样 从PE中可以提取维护版


现在的0PE就可以提取维护版  还可以提取零体积版 专用模块等
回复

使用道具 举报

8#
发表于 2010-2-18 21:43:26 | 只看该作者
学习一下 (*^__^*)
回复

使用道具 举报

9#
 楼主| 发表于 2010-2-18 21:48:02 | 只看该作者
原帖由 ddaiqq 于 2010-2-18 19:15 发表
希望能像小马PE一样 从PE中可以提取维护版

0PE是可剪裁、可扩展的PE,具有比模块化更精细的文件级组件化全外露(方便增减文件)结构。

不但能弄出维护版、网络版等,而且还能弄出兼顾维护、网络的版本。

可以弄出骨头版,还可以弄出比骨头版更小的、仍有用处的版本。本帖其实就是一个几兆的版本。

参见0PE文档
readme_版本合一、可剪裁.txt
或:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=137207&page=296#pid1890228
回复

使用道具 举报

10#
发表于 2010-2-18 22:18:01 | 只看该作者
慢慢学习吸收知识很丰富啊
回复

使用道具 举报

11#
发表于 2010-2-19 04:02:41 | 只看该作者
原帖由 pseudo 于 2010-2-18 21:48 发表

0PE是可剪裁、可扩展的PE,具有比模块化更精细的文件级组件化全外露(方便增减文件)结构。

不但能弄出维护版、网络版等,而且还能弄出兼顾维护、网络的版本。

可以弄出骨头版,还可以弄出比骨头版更小 ...

还要用户自己弄啊? 今时今日 这样的态度已经不行了(虽然没有利益关系)

[ 本帖最后由 ddaiqq 于 2010-2-19 04:42 编辑 ]
回复

使用道具 举报

12#
发表于 2010-2-19 11:42:47 | 只看该作者
这样可以提高效率。。。
回复

使用道具 举报

13#
 楼主| 发表于 2010-2-19 12:46:46 | 只看该作者
原帖由 ddaiqq 于 2010-2-19 04:02 发表
还要用户自己弄啊? 今时今日 这样的态度已经不行了(虽然没有利益关系)

哦,楼上一语点醒梦中人。

楼上需要的可能是这类现成的维护版、上网版、全功能版等。像下图这个,每个版本提供一个独立iso文件,连提取都不用。

现在比较懒,不再提供这种现成的多个版本了。

0PE本来就主张版本合一,一个顶多个。各个版本其实都是由全功能版剪裁得到的。
0PE提供一个全功能版的工程,可以直接删除里面的文件(只删文件,不用解压、打包、修改配置),也可以自己加东西(将来自动生成快捷方式),然后运行一个批处理就得到结果iso。
0PE基本没有ntdetect.com、BOOTFONT.BIN、MYINS.DLL这类面向系统的文件,0PE的文件基本上都是面向用户的组件,其功能作用一般可以顾名思义。因此不想上网该删掉那些文件是比较直观的。

如果楼上不想自己弄,建议找提供现成版本的PE就行了。
回复

使用道具 举报

14#
发表于 2010-2-19 15:22:41 | 只看该作者
#这行表示绕过0PE第一菜单界面,直接调用其菜单项
write 0x60300 0x60300
#这行指定调用0PE第1菜单项
write 0x60100 1
P大解析一下内存变量的含义
回复

使用道具 举报

15#
发表于 2010-2-19 15:39:53 | 只看该作者
学习,还不太会,感谢您的分享!!
回复

使用道具 举报

16#
发表于 2010-3-20 00:55:34 | 只看该作者
留下记号 慢慢学习 多谢!!
回复

使用道具 举报

17#
发表于 2010-3-20 08:57:34 | 只看该作者
你的手段太高了!慢慢看。。。
回复

使用道具 举报

18#
发表于 2010-3-20 23:01:31 | 只看该作者
非常棒,本来一直关注着P大的帖子,努力跟着P大学习,无奈俗事太多,有好长时间,只能来坛里看几眼。如今看到这个帖子,已经觉得自己落了好远,望尘莫及了。
P大和C大的确把G4D运用到了极致,这种程式化的菜单必将成为G4D菜单的主流。看到如此智能化的菜单,就感觉找回了过去趴在电脑前打游戏的那种畅快感。
另有一个问题想请教:
write 0x60300 0x60300这一句中我想应该是写入一个标志吧?当执行MENU.0PE时,来读取这个标志。
那么这串数字是任意的呢?还是固定的?
如果是固定的原因是什么?

[ 本帖最后由 guoqqqqqq 于 2010-3-20 23:06 编辑 ]
回复

使用道具 举报

19#
 楼主| 发表于 2010-3-20 23:36:22 | 只看该作者

回复 #18 guoqqqqqq 的帖子

前一个数字0x60300是要写入的地址,后一个是要写入的数据。
那个地方如果那么巧,竟然出现那个特定数据,肯定是有人有意为之。
这是我做的约定,以此为标志。

至于为什么用0x60300,那是因为以前0PE提供xp与03合一的版本,
这个地址曾用来存放一个区分两者的标志,现在不弄03的版本了,
就拿这个地址来做新的标志。写入的数据规定为什么好呢,跟地址一样最简单了。

要说明的是,现在grub4dos支持变量名、值,可简单地使用变量做标志、传递参数。

但使用变量要附带额外的外部命令文件,导致出现非面向用户的文件,有悖0PE清爽原则(每个文件是面向用户、可删除的组件)。
所以对于面向用户的菜单,像这样不使用变量更好。
回复

使用道具 举报

20#
发表于 2010-3-21 00:24:07 | 只看该作者

回复 #19 pseudo 的帖子

原来如此,谢谢P大。这也就是说这个地址,是一个在启动阶段,暂时不被使用的一个闲置地址。像这样的地址应该不是一个,至少是一段或几段内存区域,怎么来确定哪些地址在启动阶段是闲置的呢?

能不能请P大给出一个闲置的内存范围,让大家今后在模仿时,有一个自主的选择。

另外,也希望P大给坛友们开个帖子,补补课,略讲讲G4D的变量名、值、变量等G4D相关编程内容的使用。方便大家以后做程序式菜单时,以此作为参照准则。
回复

使用道具 举报

21#
 楼主| 发表于 2010-3-21 13:50:09 | 只看该作者
0x60000~0x603FF
回复

使用道具 举报

22#
发表于 2013-2-27 10:04:12 | 只看该作者
原帖由 pseudo 于 2010-2-18 21:48 发表

0PE是可剪裁、可扩展的PE,具有比模块化更精细的文件级组件化全外露(方便增减文件)结构。

不但能弄出维护版、网络版等,而且还能弄出兼顾维护、网络的版本。

可以弄出骨头版,还可以弄出比骨头版更小 ...

求P大分享这个文件吧。刚认识到OPE的强大,惊叹不已,如此强大。
回复

使用道具 举报

23#
 楼主| 发表于 2013-2-27 11:17:57 | 只看该作者

回复 #22 shan 的帖子

淡定
这是一个玩具,还没“上贼船”、不想折腾的绕过吧。
回复

使用道具 举报

24#
发表于 2013-2-28 18:04:09 | 只看该作者
老大就上次贼船吧,好想体验超级骨头版本在古董机器上的淋漓尽致啊O(∩_∩)O~
悄悄发我邮箱里,我来测试可以吗?
回复

使用道具 举报

25#
 楼主| 发表于 2013-2-28 20:11:20 | 只看该作者

回复 #24 shan 的帖子

你是想找几兆大小的"零体积版"xppe/03pe吗?
有个统一PE终结版下载帖,自己找来剪裁一下,就有了。
典型的零体积版4MB左右已经是全功能PE。

追求“骨头”意义不大,建议少玩电脑。
回复

使用道具 举报

26#
发表于 2018-10-19 15:48:24 来自手机 | 只看该作者
p大的理念,  程式菜单应用技术举例:参数化菜单功能调用
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 10:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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