无忧启动论坛

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

[求助] 再提一个比较刁钻的话题,怎么随系统自动生成菜单?

[复制链接]
跳转到指定楼层
1#
发表于 2011-3-24 17:28:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如:在只安装xp的系统上面,只显示XP的引导,在多系统的电脑上面,显示相应的系统引导选项?

Windows XP
Windows 7
Windows PE


g4d怎么判断一个文件存在?ls返回值怎么检查?

[ 本帖最后由 2011大帝 于 2011-3-24 17:49 编辑 ]
2#
 楼主| 发表于 2011-3-24 18:51:02 | 只看该作者

一个解决方案

首先建立一个/boot/auto.lst的文件,大小2k,用winhex全部添0。因为使用了gfxmenu,所以里面的中文使用了转义字符\xNN编码,测试成功。现在唯一的问题是,原生的grub4dos不支持变量,这样做出来的auto.lst,菜单前面不能加上[1][2][3]这样的编号。不过怎么说也是一个办法,等着grub4dos支持变量吧。别的支持变量的插件,俺不会用,抱歉。。。


内部菜单:

#Grub Menu by sdragonx 2011-03-23
#QQ:51306326
#E-Mail:sdragonx@foxmail.com

pxe detect
configfile
default 0
timeout 0

title Loading
        errorcheck off
        find --set-root /boot/sdragonx.img
        map --mem /boot/sdragonx.img (fd0)
        map --hook
        root (fd0)
        echo -e -n \xEF\xBB\xBF
        echo root (fd0) >> /boot/auto.lst
        echo gfxmenu /boot/gfxmenu.bin >> /boot/auto.lst
        echo timeout 10 >> /boot/auto.lst
        echo default 0 >> /boot/auto.lst
        echo fallback 1 >> /boot/auto.lst
        echo configfile /boot/cmd.lst >> /boot/auto.lst

        find /ntldr && echo -e title Microsoft Windows XP Professional\r\nfind --set-root --ignore-floppies --ignore-cd /ntldr\r\nchainloader /ntldr >> /boot/auto.lst
        find /bootmgr && echo -e title Windows 7\r\nfind --set-root --ignore-floppies --ignore-cd /bootmgr\r\nchainloader /bootmgr >> /boot/auto.lst
        find /PELDR && echo -e title Windows PE \xE7\xB3\xBB\xE7\xBB\x9F\r\nfind --set-root --ignore-floppies --ignore-cd /PELDR\r\nchainloader /PELDR >> /boot/auto.lst
        find /boot/csita.lst && echo -e title \xE6\x88\x91\xE7\x9A\x84\xE5\x90\xAF\xE5\x8A\xA8\xE7\x9B\x98\r\nconfigfile /boot/csita.lst >> /boot/auto.lst

        configfile (fd0)/boot/auto.lst || configfile (fd0)/BOOT/AUTO.LST
        errorcheck on
        commandline

[ 本帖最后由 2011大帝 于 2011-3-24 18:56 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2011-3-24 18:53:47 | 只看该作者

另外听说gfx能够自动给菜单项加上编号

这个功能怎么实现?

gfxboot的源代码,我看着头疼啊。也没有一个像样的教程,表达式看着跟天书一样。。。。

无忧启动网站现在的稳定性貌似不好,有时候刷新都不出来。
回复

使用道具 举报

4#
 楼主| 发表于 2011-3-24 19:48:46 | 只看该作者
grub4dos已经支持变量了。吼吼~~~~
回复

使用道具 举报

5#
发表于 2011-3-25 12:27:19 | 只看该作者
期待楼主编好 放出来共享。
回复

使用道具 举报

6#
 楼主| 发表于 2011-3-25 15:36:57 | 只看该作者

能使用变量了,就是爽!!

下面这个,已经能够辨认XP/NT、Win7/Vista、PE、以及默认的启动盘了。需要的可以自己照着修改代码,添加比较完善的启动系统。另外一点是,timeout必须在gfxmenu=msg前面,不然的话,不会处理等待时间。
03-28,我简化一下菜单,只是告诉大家一个思路,比较完善的,自己添加吧。

#Grub Menu by sdragonx 2011-03-23
#QQ:51306326
#E-Mail:sdragonx@foxmail.com

pxe detect
configfile
default 0
timeout 0

title Loading
        errorcheck off
        #查找你要启动的软盘镜像,软盘镜像
        find --set-root /boot/auto.lst
        #菜单标签变量
        set id=1
        #auto菜单位置的变量,方便大家更改自定义的菜单位置,但是这个auto.lst的菜单必须是什么内容都没有的,而且大小必须能够放得下自动生成的菜单
        #我自己做的2k大小,你们自己的话,4k、8k都可以。
        set fauto=/boot/auto.lst
        #下面的内容,其实玩过dos的都明白,使用echo写入文件,其实就是往auto.lst里面写入检测到的系统,生成菜单。
        #因为gfxmenu菜单的格式必须是unicode8的,下面写入的是unicode8的文件头
        echo -e -n \xEF\xBB\xBF
        #写入等待时间
        echo timeout 10 >> %fauto%
        #默认菜单项
        echo default 0 >> %fauto%
        #失败返回
        echo fallback 0 >> %fauto%
        #查找跟路径
        echo find --set-root /boot/auto.lst >> %fauto%
        #gfxmenu图形菜单模式,这个大家都懂得
        echo gfxmenu (fd0)/boot/gfxmenu.bin >> %fauto%
        #按esc键,退出gfxmenu菜单时,进入的grub菜单
        echo configfile (fd0)/boot/cmd.lst >> %fauto%

        #这个是查找XP/NT系统的,目标是查找ntldr,但是具体是2000、2003还是xp,这个我不知道怎么分辨
        find /ntldr && set /a id=%id%+1 && echo -e title [%id%] Microsoft Windows XP Professional  \r\nfind --set-root --ignore-floppies --ignore-cd /ntldr\r\nchainloader /ntldr >> %fauto%
        #这个是win7/vista,一样我分不出具体系统
        find /bootmgr && set /a id=%id%+1 && echo -e title [%id%] Windows 7\r\nfind --set-root --ignore-floppies --ignore-cd /bootmgr\r\nchainloader /bootmgr >> %fauto%
        #查找pe系统
        find /PELDR && set /a id=%id%+1 && echo -e title [%id%] Windows PE \xE7\xB3\xBB\xE7\xBB\x9F\r\nfind --set-root /PELDR\r\nchainloader /PELDR >> %fauto%
        #这个是启动自己的启动盘的,这些\xE6的字符是unicode8格式的汉字,这个没有办法,直接echo输出的汉字是ansii格式的。
        echo -e title [%id%] \xE6\x88\x91\xE7\x9A\x84\xE5\x90\xAF\xE5\x8A\xA8\xE7\x9B\x98\r\nconfigfile (fd0)/boot/csita.lst >> %fauto%
        #调用生成的菜单
        configfile %fauto% || configfile %fauto%
        errorcheck on
        commandline



我分解一下查找的命令:
查找ntldr  并且  设置菜单id值+1   然后 输出菜单到 %fauto% 变量指定的文件。
find /ntldr && set /a id=%id%+1 && echo -e title [%id%] Microsoft Windows XP Professional  \r\nfind --set-root --ignore-floppies --ignore-cd /ntldr\r\nchainloader /ntldr >> %fauto%


echo -e title [%id%] Microsoft Windows XP Professional  \r\nfind --set-root --ignore-floppies --ignore-cd /ntldr\r\nchainloader /ntldr
这个命令输出结果就是:
title [1]  Microsoft Windows XP Professional
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr

echo 后面加上 -e,就可以支持转义字符,\r\n就是一个回车换行的标志。
希望鸟鸟们看明白了。


下面的这个就是一个空的auto.lst文件。

[ 本帖最后由 2011大帝 于 2011-3-28 01:24 编辑 ]

auto.rar

90 Bytes, 下载次数: 29, 下载积分: 无忧币 -2

automenu.part01.rar

97.66 KB, 下载次数: 30, 下载积分: 无忧币 -2

一个简单的实例,基本文件的软盘镜像,有兴趣的参考一下,自己再做一个完美的。

automenu.part02.rar

97.66 KB, 下载次数: 30, 下载积分: 无忧币 -2

直接加载的虚拟机的软盘里面,至少能认出xp和win7

automenu.part03.rar

97.66 KB, 下载次数: 29, 下载积分: 无忧币 -2

内置菜单的源文件,我放里面了,你们可以根据需要修改。

automenu.part04.rar

97.66 KB, 下载次数: 25, 下载积分: 无忧币 -2

automenu.part05.rar

97.66 KB, 下载次数: 25, 下载积分: 无忧币 -2

automenu.part06.rar

97.66 KB, 下载次数: 26, 下载积分: 无忧币 -2

automenu.part07.rar

97.66 KB, 下载次数: 27, 下载积分: 无忧币 -2

automenu.part08.rar

62.93 KB, 下载次数: 28, 下载积分: 无忧币 -2

回复

使用道具 举报

7#
发表于 2011-3-26 15:34:41 | 只看该作者

回复 #6 2011大帝 的帖子

能否把相关文件直接传上来,菜鸟看不懂,呵呵
回复

使用道具 举报

8#
 楼主| 发表于 2011-3-28 00:47:05 | 只看该作者
上面的就是一个内置菜单,目的很简单,查找分区里面的bootmgr、ntldr、peldr(其他版本的pe,请更换名称)。因为直接启动bootmgr,win7会提示没有正版认证,请替换成需要的win7ldr之类的破解的win7引导。grldr太大了,我说一下文件结构吧:

c:\grldr                      包含以上信息的grub引导。
c:\boot\auto.lst          2k大小的空文件,用winhex全部清零,也就是里面什么也没有。
c:\boot\cmd.lst          按ESC键退出gfxmenu时,进入的grub菜单。
c:\boot\gfxmenu.bin   gfxmenu的message文件,压不压缩随你。
别的没了。

cmd.lst 的内容,就简单的两行:
timeout=0
default=0

title command
commandline
#这里设置返回gfxmenu菜单
configfile=fd(0)/boot/auto.lst

#end

在gfxmenu菜单之下,按esc直接进入commandline模式;再按esc,就直接回到gfxmenu模式之下。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-2 17:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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