无忧启动论坛

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

[分享] G4D与G4E共用菜单的优化

[复制链接]
跳转到指定楼层
1#
发表于 7 小时前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mygamexxx 于 2024-12-2 13:33 编辑

在MBR的硬盘(WEE作为主引导记录)1-2GB的FAT32格式的隐藏分区中,放入PE与BIOS和UEFI启动模块。BIOS启动使用WEE查找/boot/grub/grldr启动,该grldr内置菜单修改为查找/efi/grub/menu.lst的G4D和G4E共用菜单。G4D的外部命令在/boot/ext,G4E的外部命令在/efi/ext。


菜单内容:

#内置变量:
# @date ,输出当前日期,格式为 YYYY-MM-DD
# @time ,输出当前时间,格式为 hh:mm:ss
# @random ,产生一个 0 到 32767 之间的随机数字
# @root ,用来保存当前root的驱动器号
# @path ,用来保存当前默认外部命令查找路径
# @retval (即 0x4cb00处值) ,获取命令的返回值或其他结果
# ?_WENV 等同于 内置变量 ?_UUID
# ?_UUID (注意大写),用来保存使用uuid命令获取到的磁盘uuid值
# %?% ,用来保存命令返回的字符串信息
# ?_BOOT变量(@boot),访问启动GRUB4DOS的Boot_drive
# @uefi,(0x8272)值为64/32,用于判断UEFI系统是64/32位。00是BIOS系统。
#内部变量:
# 0x82a0保存的是当前根所在的驱动器(current root drive)
# 0x829c保存的是当前根分区号(current root partition)
# 0x8208保存的是启动分区号(the boot partition)
# 0x8280保存的是启动驱动器号(boot_drive)
# 0x8312,避免重入主菜单时重复设置图形模式、加载背景图及字库。
# calc *0x8312&1 > nul || graphicsmode -1 800
# calc *0x8312&2 > nul || splashimage /boot/grub/lt.jpg
# calc *0x8312&4 > nul || font /boot/grub/unifont.hex.gz

#显示模式,要放在最前,运行graphicsmode显示支持的模式
#graphicsmode 256
calc *0x8312&1 > nul || graphicsmode -1 800

##判断启动方式,设置变量
if %@uefi%#==# && set bt=BIOS && set ph=/boot ! set bt=EFI_x%@uefi% && set ph=/efi
#定位WINDOWS系统分区,如果存在多个WINDOWS系统分区,只定位首先找到的分区!可改为设定查找定位文件来确定。
find --set-root /windows | set win=

##计算物理硬盘数,检查是否存在GPT分区的硬盘
rootnoverify (hd-1)
set /a hdn=*0x82a0&0xff-127
find checkrange 0xEE parttype && set pt="警告:存在GPT类型的硬盘!!!" ! set pt="==========================="
root %@boot%

#热键设置(在字库加载后运行,会出错? error:not enough space!)
%ph%/ext/hotkey -A [F4] commandline
%ph%/ext/hotkey -A [F3] reboot
#设置热键颜色
setmenu --hotkey-color=0xffff00

#更多菜单编辑功能、动画、图像菜单等等,可参考http://bbs.wuyou.net/forum.php?m ... 9720&extra=page%3D3
#加载透明背景的图像    splashimage [--offset=[type]=[x]=[y]] FILE
#类型[type]:bit 7: 透明背景
#  1.增加图像背景色设置方法。    splashimage --fill-color=[0xrrggbb]
#    作用之一,作为小图像的背景。
#    作用之二,直接作为菜单的背景(即不加载图像背景)。此时只设置字体的前景色即可。
#  2.增加动画菜单。    splashimage --animated=[type]=[delay]=[last_num]=[x]=[y] START_FILE
#    类型[type]:bit 0-3: 播放次数    bit 4: 永远重复    bit 7: 透明背景
#                      type=00: 禁止播放
#                播放n次:序列图像各显示n次,时间独占。可作为启动前导、序幕。
#                永远重复:序列图像无限循环,时间与菜单共享。可作为菜单里的动画。
#                背景透明:即抠像。要求4角像素为背景色。
#                                背景色最好为白色或黑色,这样可以去除一些灰色杂波。若是彩色背景,则应当非常干净。
#                提醒:请以16进制方式输入。否则易错。
#    延迟[delay]:序列图像之间的延迟。单位是滴答,即1/18.2秒。
#    序列数[last_num]:序列图像总数(2位数,从1开始计数)。
#    偏移[x]、[y]:图像偏移,单位像素。
#    起始文件名[START_FILE]命名规则:*n.???   n: 1-9 或 01-99 或 001-999。
calc *0x8312&2 > nul || splashimage /boot/background.jpg

#font [--font-high=24] [--simp=] 文件名
#    例子:  font /my.hex
#                font --font-high=24 --simp=  /24.hex
#  内置字库,如果不是 16*16 字体,头部需声明:DotSize=24,simp

# 加载字库
calc *0x8312&4 > nul || font --font-high=22 /boot/hk22.hex

# EFI启动时加载截图模块,按左Ctrl+左Alt+F12截图,图片以8位数字.png的形式保存在第一个找到的FAT16/FAT32分区。
if %bt%==EFI_x64 load -n /EFI/grub/CrScreenshotDxe.efi

#######################################################################################
## 0x00黑色black  0x01蓝色blue   0x02绿色green  0x03青色cyan
## 0x08暗灰dark-gray 0x09亮蓝light-blue  0x0A亮绿light-green 0x0B亮青light-cyan
## 0x04红色red   0x05紫色magenta   0x06棕色brown  0x07灰色gray
## 0x0C亮红light-red 0x0D亮紫light-magenta 0x0E黄色yellow  0x0F白色white
#######################################################################################
##颜色  菜单文字       选择高亮          帮助信息          版本信息         边框
color normal=0x0F highlight=0x0A helptext=0x05 heading=02 border=01

#color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00 border=0x99
#setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd  HH:mm:ss"
#颜色:24位色  0x红红绿绿蓝蓝

#菜单自动编号
# --auto-num-off --auto-num-on 关闭/打开菜单自动编号。默认关闭;
#  --left-align --right-align 菜单左对齐/右对齐。默认左对齐。
#  --font-spacing=[font]:[line] 设置字符间距/行间距。单位:像素。默认0。应当位于下面的参数之前;

setmenu --auto-num-on

##--box x=[x] y=[y] w=[w] h=[h] l=[l] 菜单项标题起始列,起始行,每行最大字符数,最大菜单项数,菜单框线条宽度(像素);
##    注:w=0 表示水平居中。此时 w 应当在 x 之后;
##       l=0 表示不显示菜单框;
##--ver-on --ver-off 版本信息打开/关闭。默认打开;

setmenu --box x=9 w=0 y=8 h=10 l=10    --ver-on

##--lang=en --lang=zh 菜单帮助信息中英文切换。默认英文;
##--timeout=[x]=[y]=[color] 倒计时位置、颜色。单位:列,行,24位色彩.
##    注:x=y=0 默认位于选中项目的尾部;
##          color=0 默认 "color highlight"。

setmenu --lang=zh  --timeout=8=6=0xff00

##--help=[x]=[w]=[y] 帮助位置。单位:列,行;    注:x=0 由边框确定(默认);w=0 水平居中;

setmenu --help=8=0=19

##--keyhelp=[y_offset]=[color] 按键帮助位置,颜色。单位:列,行,24位色彩;
##    注:y_offset=0,项目与按键帮助位于同一区域,项目帮助可以覆盖按键帮助(默认);
##          y_offset != 0,按键帮助到项目帮助的行偏移,项目帮助与按键帮助共存;
##          y_offset<=4,项目帮助的显示行数;

setmenu --keyhelp=2=0x222222

#  --string=[x]=[y]=[color]=["string“] 字符串位置、颜色与内容,可用于标题,说明,帮助等。单位:列,行,24位色彩;
#    注:如果省略颜色,位于菜单框以上按标题颜色,位于菜单框以下按帮助颜色;
#          字符串头尾要加英文双引号;
#          列数=图像水平像素/(字符宽+字符间距)   字符宽=8;
#          行数=图像垂直像素/(字符高+行间距)      字符高=10;

#提示硬盘数量,类型,启动方式
setmenu --string=9=3=0xffff00="%pt:~1,-1%==%@date%==小楼一夜听春雨=="
setmenu --string=9=5=0xff00ff="硬盘数量:%hdn%,启动分区:%@boot%,启动方式:%bt%"


###################菜单开始###################

if %bt%==BIOS && set mn2="chainloader %@boot%%ph%/bootmgr" ! set mn2="chainloader %@boot%%ph%/microsoft/boot/bootmgfw.efi"

default 0
timeout 6

title 快速启动 WINDOWS\n快速启动硬盘上的系统
#用延时为0的bcd0文件覆盖bcd文件, 默认启动WINDOWS10
if %bt%==BIOS && dd if=%@boot%%ph%/bcd0 of=%@boot%%ph%/bcd ! dd if=%@boot%%ph%/microsoft/boot/bcd0 of=%@boot%%ph%/microsoft/boot/bcd
%mn2:~1,-1%
boot

title 用BCD启动 WINDOWS\n用BCD启动硬盘上的系统
#用延时为30的bcd30文件覆盖bcd文件,显示带PE启动项的菜单
if %bt%==BIOS && dd if=%@boot%%ph%/bcd30 of=%@boot%%ph%/bcd ! dd if=%@boot%%ph%/microsoft/boot/bcd30 of=%@boot%%ph%/microsoft/boot/bcd
%mn2:~1,-1%
boot

title 启动WIM格式WIN10PE-X64\n启动/0pe/10PE.WIM
%@boot%%ph%/ext/RUN %@boot%/0pe/10pe.wim
boot

title 运行任意映像文件\n运行/imgs/下映像文件
%@boot%%ph%/ext/RUN --mem --noload --top --set-showsize=0 --automenu show.iso.wim.img /imgs/
boot

#很奇怪,这里不能用[if %bt%==BIOS]
iftitle [if %@uefi%#==#] 启动 0PE\n启动%@boot%/0pe/0pe.iso
map --mem %@boot%/0pe/0pe.iso (0xff)
map --hook
chainloader (0xff)
boot

iftitle [if %@uefi%==64] 启动 rEFInd\n启动%@boot%%ph%/rEFInd/refind_x64.efi
chainloader %@boot%%ph%/rEFInd/refind_x64.efi
boot

title [F4]进入命令行commandline\n进入命令行
commandline

title 启动存在的光盘(cd0)
chainloader (cd0)

title [F3]重启reboot\n重启电脑
reboot

title 关机halt\n关闭电脑(无法正常关机,在设置-系统-电源和睡眠-其他电源设置-选择电源按钮的功能-更改当前不可用的设置-取消"启用快速启动")
halt
2#
发表于 6 小时前 | 只看该作者

谢谢分享
回复

使用道具 举报

3#
发表于 6 小时前 | 只看该作者
谢谢,收藏起
回复

使用道具 举报

4#
发表于 6 小时前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

5#
发表于 5 小时前 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
发表于 5 小时前 | 只看该作者
谢谢楼主分享!
回复

使用道具 举报

7#
发表于 5 小时前 | 只看该作者
看不懂,来学习
回复

使用道具 举报

8#
发表于 5 小时前 | 只看该作者
感谢分享
回复

使用道具 举报

9#
发表于 4 小时前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

10#
发表于 4 小时前 | 只看该作者
感谢分享
回复

使用道具 举报

11#
发表于 1 小时前 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-2 19:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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