无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011yaya2007777

[发布] 增强 GRUB4DOS 菜单编辑功能,支持动画,支持精简字库,支持图形菜单

    [复制链接]
发表于 2021-3-25 21:14:21 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2021-3-25 12:37
不能。目前只是实现了启动阶段由蜂鸣器播放音乐。但是声音不可控。

嗯,以后有没有希望,支持增加背景音乐呢?
回复

使用道具 举报

发表于 2021-3-30 12:15:30 | 显示全部楼层
既然升级了,以前用的menuset外部命令,现在用回这个,但好像与hotkey外部命令冲突,加上hotkey就不出菜单。setmenu自带热键功能吗?
回复

使用道具 举报

 楼主| 发表于 2021-3-30 12:36:57 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-3-30 12:39 编辑

grub4dos for uefi 带热键功能。菜单设置请使用内部命令,外部命令已经不兼容。

点评

g4d for bios的带不带,怎么启用?  详情 回复 发表于 2021-3-30 18:01
回复

使用道具 举报

发表于 2021-3-30 18:01:05 | 显示全部楼层
本帖最后由 hhh333 于 2021-3-30 18:05 编辑
2011yaya2007777 发表于 2021-3-30 12:36
grub4dos for uefi 带热键功能。菜单设置请使用内部命令,外部命令已经不兼容。

g4d for bios的带不带,怎么启用?譬如这样的:title ^D 进入 DOS工具集
顺便再问一下:grub4dos for uefi 如何判断是32位还是64位环境
回复

使用道具 举报

 楼主| 发表于 2021-3-30 20:05:09 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-3-31 09:24 编辑

bios版本不带内部热键。uefi版本带内部热键。内部热键用法是:
setmenu --hotkey 参数
其他和热键以前的外部命令一样。

uefi版本判断32/64的方法:
calc *0x8272&0xff | set ver=
使用变量ver判断32/64.

点评

怪了,菜单中加 calc *0x8272&0xff | set arch= if /i "%arch%"=="64 (HEX:0x40)" set IA=x64 || set IA=ia32 怎么arch总是没赋值?IA永远ia32 但放到命令行状态执行又没问题 [attachimg]477554[/attachimg]  详情 回复 发表于 2021-3-31 12:29
既然可以自动编号了,实际上热键也没必要,把菜单都改成无热键形式算了  详情 回复 发表于 2021-3-31 10:31
回复

使用道具 举报

发表于 2021-3-31 10:31:34 | 显示全部楼层
2011yaya2007777 发表于 2021-3-30 20:05
bios版本不带内部热键。uefi版本带内部热键。内部热键用法是:
setmenu --hotkey 参数
其他和热键以前的 ...

既然可以自动编号了,实际上热键也没必要,把菜单都改成无热键形式算了
回复

使用道具 举报

发表于 2021-3-31 12:29:08 | 显示全部楼层
2011yaya2007777 发表于 2021-3-30 20:05
bios版本不带内部热键。uefi版本带内部热键。内部热键用法是:
setmenu --hotkey 参数
其他和热键以前的 ...

怪了,菜单中加
calc *0x8272&0xff | set arch=
if /i "%arch%"=="64 (HEX:0x40)" set IA=x64 || set IA=ia32
怎么arch总是没赋值?IA永远ia32
但放到命令行状态执行又没问题
Windows 8 x64-EFI-2021-03-31-12-28-40.png

回复

使用道具 举报

 楼主| 发表于 2021-3-31 14:36:38 | 显示全部楼层
calc *0x8272&0xff | set /a arch=
if /i "%arch%"=="64" set IA=x64 || set IA=ia32

点评

arch变成零了  详情 回复 发表于 2021-3-31 14:58
哦,好久没用,生疏了  详情 回复 发表于 2021-3-31 14:49
回复

使用道具 举报

发表于 2021-3-31 14:49:09 | 显示全部楼层
2011yaya2007777 发表于 2021-3-31 14:36
calc *0x8272&0xff | set /a arch=
if /i "%arch%"=="64" set IA=x64 || set IA=ia32

哦,好久没用,生疏了
回复

使用道具 举报

发表于 2021-3-31 14:58:39 | 显示全部楼层
2011yaya2007777 发表于 2021-3-31 14:36
calc *0x8272&0xff | set /a arch=
if /i "%arch%"=="64" set IA=x64 || set IA=ia32

arch变成零了
回复

使用道具 举报

 楼主| 发表于 2021-3-31 15:29:26 | 显示全部楼层
批处理我也不熟悉。

calc *0x8272&0xff > nul ;; set arch=%@retval%
if /i "%arch%"=="64" set IA=x64 || set IA=ia32

点评

运行后,PE与arch都是0,难道只支持两个变量吗?  详情 回复 发表于 2021-4-2 06:27
回复

使用道具 举报

发表于 2021-4-2 06:27:46 | 显示全部楼层
本帖最后由 hhh333 于 2021-4-2 06:34 编辑
2011yaya2007777 发表于 2021-3-31 15:29
批处理我也不熟悉。

calc *0x8272&0xff > nul ;; set arch=%@retval%
  1. set BZD=/EFI/boot
  2. set IA=x64
  3. set PE=64
  4. calc *0x8272&0xff > nul ;; set arch=%@retval%
  5. #if "%arch%"=="64" set IA=x64 || set IA=ia32

  6. if "%arch%"=="32" set BZD=/BOOT
  7. if "%arch%"=="32" set IA=ia32
  8. if "%arch%"=="32" set PE=PE
复制代码
运行后,PE与arch都是0,难道只支持两个变量吗?
Windows 8 x64 EFI-2021-04-02-06-25-47.png
回复

使用道具 举报

 楼主| 发表于 2021-4-2 07:00:18 来自手机 | 显示全部楼层
设置arch变量后,使用echo %arch%查看一下,看看是什么值。

点评

只运行这三个,后面都不运行,最后一个是空的  详情 回复 发表于 2021-4-2 07:34
回复

使用道具 举报

发表于 2021-4-2 07:34:43 | 显示全部楼层
2011yaya2007777 发表于 2021-4-2 07:00
设置arch变量后,使用echo %arch%查看一下,看看是什么值。
  1. set BZD=/EFI/boot
  2. set IA=x64
  3. set PE=64
复制代码

只运行这三个,后面都不运行,最后一个是空的
回复

使用道具 举报

 楼主| 发表于 2021-4-2 08:08:59 来自手机 | 显示全部楼层
怪事,上面代码我这里测试正常。

点评

这是菜单和启动包,你看一下。  详情 回复 发表于 2021-4-2 08:48
回复

使用道具 举报

发表于 2021-4-2 08:48:52 | 显示全部楼层
2011yaya2007777 发表于 2021-4-2 08:08
怪事,上面代码我这里测试正常。

EFI.7z (1.21 MB, 下载次数: 35)
回复

使用道具 举报

 楼主| 发表于 2021-4-2 09:39:20 | 显示全部楼层
正常

新建截图-20210402093656.jpg
新建截图-20210402093725.jpg

点评

我发你的是2月10号的版本  详情 回复 发表于 2021-4-2 09:45
回复

使用道具 举报

发表于 2021-4-2 09:45:34 | 显示全部楼层
本帖最后由 hhh333 于 2021-4-2 09:46 编辑

我发你的是2月10号的版本,是光盘启动方式
回复

使用道具 举报

 楼主| 发表于 2021-4-2 10:02:59 | 显示全部楼层
明白了。这几天我在调试批处理代码,是有一些内存分配方面的问题。
看起来你反馈的这个问题已经解决。还有些待处理的问题,请等待。
回复

使用道具 举报

发表于 2021-4-7 12:32:57 | 显示全部楼层
以为是个图形工具, 再看看明白了
回复

使用道具 举报

发表于 2021-4-8 09:44:31 | 显示全部楼层
小白还要慢慢研究
回复

使用道具 举报

发表于 2021-4-8 11:13:30 | 显示全部楼层
本帖最后由 hhh333 于 2021-4-8 11:32 编辑

请yaya解惑,或者也算一个bug
G4D(grub4dos-0.4.6a-2021-01-27)一启光盘,先根下的menu.lst,再根据类型启动相应的子菜单
这是menu.lst
debug off
calc *0x8205=*0x8205|0x20
timeout 1
set h3cd=H3CDALL.ISO

#默认启动菜单
set grmenu=H3_GR2HD.LST

#UD启动菜单(注意:menu.lst位于UD内时表示启动文件和内核均藏于UD内启动,即H3PE约定menu.lst总是跟着BOOT和内核走,切记!)
if %@root%==(ud) set grmenu=H3_GR2UD.LST

#光启菜单
if %?_BOOT%==(cd) set grmenu=H3_GR2CD.LST
checkrange 0xA0:0xFF read 0x82A0 > nul && set grmenu=H3_GR2CD.LST

#网启菜单
if %?_BOOT%==(pd) pxe keep && set grmenu=H3_GRPXE.LST

#ISO整体启动菜单
if %?_BOOT%==(ud) if exist (ud)/%h3cd% root (ud)
if /i exist /%h3cd% goto H3CDALL

:H3CD-HD-UD-PXE
#以下内容用于多启动方式时调用相应菜单文件启动

terminal console
font /BOOT/GRUB/UNIFONT.HEX
graphicsmode -1 1024
splashimage /BOOT/GRUB/BACK.BMP.GZ
terminal --font-spacing=0:3
setmenu --box x=16 w=200 y=5 h=40 l=0 --lang=zh --auto-num-on
setmenu --string=-200=-6=0x00FF33="date&time=yyyy-MM-dd  HH:mm:ss"
setmenu --string=32=3=0xffff00="Grub4DOS-Bios CD启动菜单"
configfile /BOOT/%grmenu%

:H3CDALL
#以下内容用于整体启动
timeout 15
default 1

color white/blue white/red yellow/blue white/magenta

title              __________Load %h3cd% _________
clear

title [1]--"map --mem /%h3cd%" at first\nNeed large memory and spend more time to load iso to memory,but support all function besides win7pe,don't use on usb1.x.
set ldiso=NO
pause --wait=0 Tring to load ISO to mem...
map --mem /BOOT/IMGS/FIRADISK.IMA (fd0) || map --mem /FIRADISK.IMA (fd0)
map --mem /%h3cd% (0xff) && set ldiso=YES
if %ldiso%==NO pause --wait=0 Tring to direct map link to ISO... && map /%h3cd% (0xff) && set ldiso=YES
if %ldiso%==YES map --e820cycles=3 && map --hook && rootnoverify (0xff) && chainloader (0xff)
boot

title [2]--"map /%h3cd%" at first\nNeedn't more memory and very fast,but the iso must be contig and can't support all function.
set ldiso=NO
pause --wait=0 Tring to direct map link to ISO...
map /%h3cd% (0xff) && set ldiso=YES
if %ldiso%==NO pause --wait=0  Tring to load ISO to mem... && map --mem /BOOT/IMGS/FIRADISK.IMA (fd0) || map --mem /FIRADISK.IMA (fd0)
if %ldiso%==NO map --mem /%h3cd% (0xff) && set ldiso=YES
if %ldiso%==YES map --e820cycles=3 && map --hook && rootnoverify (0xff) && chainloader (0xff)
boot

这是h3_gr2cd.lst的内容
  1. debug off
  2. timeout 30
  3. #setmenu  --string=32=3=0xffff00="Grub4DOS-Bios CD启动菜单"

  4. #不显示版本信息
  5. call Fn.0 0x40000 "!BAT\necho -P:0000 $[0000]\t\t\t\t\t\t\t\t\t\0" && initscript (md)0x200+1

  6. title 启动 WIN7 PE                 Boot Win7 PE\n含较新的磁盘控制器驱动,不支持USB3
  7. chainloader /BOOT/H3_MGRW7.BIN

  8. title 启动 WIN8 PE                 Boot Win8 PE\n支持USB3等新硬件
  9. chainloader /BOOT/H3_MGRW8.BIN

复制代码


setmenu  --string=32=3=0xffff00="Grub4DOS-Bios CD启动菜单"
这一条语句如果在主菜单中,则不能显示中文(注:字库无论是否简单或压缩),但如果在子菜单中则可以显示中文。

回复

使用道具 举报

 楼主| 发表于 2021-4-8 12:39:28 | 显示全部楼层
font /BOOT/GRUB/UNIFONT.HEX
graphicsmode -1 1024

这两句调换一下位置试试

点评

没什么用,我想应该不影响 [attachimg]477864[/attachimg]  详情 回复 发表于 2021-4-8 15:13
回复

使用道具 举报

发表于 2021-4-8 15:13:02 | 显示全部楼层
2011yaya2007777 发表于 2021-4-8 12:39
font /BOOT/GRUB/UNIFONT.HEX
graphicsmode -1 1024

没什么用,我想应该不影响
Windows 8-2021-04-08-15-12-07.png
回复

使用道具 举报

发表于 2021-4-8 16:55:57 | 显示全部楼层
经过测试setmenu
1、自动编号功能只在当前菜单有效,不能传递到子菜单;
2、日期时间显示在g4d中14秒才跳一次数,g4e中为秒跳;
3、日期时间显示命令在自动编号前执行会不能显示,并且造成菜单卡顿;

另外1024分辨率时,屏幕宽高是不是128X48,各分辨率状态对应的屏幕宽高各是多少,如何换算的。
回复

使用道具 举报

 楼主| 发表于 2021-4-8 17:34:18 来自手机 | 显示全部楼层
一个英文字符的像素是8*16,所以你说得对,是128*48。如果要增加字间距或者行间距,则要把这些像素加在字符像素上。
回复

使用道具 举报

 楼主| 发表于 2021-4-8 19:12:05 | 显示全部楼层
经过测试setmenu
1、自动编号功能只在当前菜单有效,不能传递到子菜单;
2、日期时间显示在g4d中14秒才跳一次数,g4e中为秒跳;
3、日期时间显示命令在自动编号前执行会不能显示,并且造成菜单卡顿;

1. 是这样的。
2及3.  是因为这句惹的祸  calc *0x8205=*0x8205|0x20 ,计时不能使用HLT指令。

setmenu  --string=32=3=0xffff00="Grub4DOS-Bios CD启动菜单"
这一条语句如果在主菜单中,则不能显示中文(注:字库无论是否简单或压缩),但如果在子菜单中则可以显示中文。
在 uefi 及 bios 环境,udf 格式文件系统测试,字库不压缩,都可以显示中文(就是使用你的菜单)。

点评

哦,我试一下。 calc *0x8205=*0x8205|0x20这句啥意思啊,有什么用?以前的菜单不记得了  详情 回复 发表于 2021-4-8 20:02
回复

使用道具 举报

发表于 2021-4-8 20:02:47 | 显示全部楼层
2011yaya2007777 发表于 2021-4-8 19:12
1. 是这样的。
2及3.  是因为这句惹的祸  calc *0x8205=*0x8205|0x20 ,计时不能使用HLT指令。

哦,我试一下。
calc *0x8205=*0x8205|0x20这句啥意思啊,有什么用?以前的菜单不记得了
回复

使用道具 举报

 楼主| 发表于 2021-4-8 20:16:24 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-4-8 20:17 编辑

使用HLT指令,减少cpu占用率。

点评

已显示时钟了,用它已经没啥意义了,是吧  详情 回复 发表于 2021-4-8 21:11
回复

使用道具 举报

发表于 2021-4-8 21:11:15 | 显示全部楼层
2011yaya2007777 发表于 2021-4-8 20:16
使用HLT指令,减少cpu占用率。

已显示时钟了,用它已经没啥意义了,是吧
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 05:27

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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