200 大洋 精通delphi的朋友請進, 怎麼用delphi制作dos啟動盤(200分)

J

jockyi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用delphi制作能夠啟動的dos軟盤. 但用delph把系統文件copy過去又不行.請大家幫忙!
 
dos启动盘的关键是建立引导扇区,在DOS中用SYS A:来实现的。如果你的系统中有这个文件
用它来运行一下就成了,
但是WIN2000好象取消了对DOS的支持?还有没有SYS.COM这个命令?
 
老大,不是一个时代的东西啊
不过,WIN2K也有启动盘的,好象有四张吧!

如果这样,用DELPHI调用外部程序SYS加上命令格式,
试试吧,不一定行啊
 
to:xygz
不能是win2k的啟動盤, 因為我做的磁片的系統是dos的,如果我調用sys 命令,
生成的啟動盤一定是win啟動盤.那我軟盤上的dos程序就運行不了了.
 
也许可以考虑用汇编代码试试。
 
那如果你用的是dos方式下的sys呢?你把这个sys集成在你的系统里,到时候读自己的sys,
我这么想的,试试?
 
一样的可以啊,Dos7.0件容易前的DOS程序的。
 
不是我理解错了,就是你理解错了(废话!)[:)]
我的意思,既然你不是要用WIN2000,那么用SYS A:这个外部命令就可以制作DOS启动盘的,
WIN2000以前的版本应该都可以的,DOS程序的运行应该没有问题的。
如果你的开发环境是WIN2000的,我是担心你的机器上还有没有SYS.COM这个命令文件,实际上
有也没用是吗?
没用过2000,据说不稳定,不敢装![:(!]
 
你想用 delphi 实现类似于 format /s 的功能?
首先找个函数可以读写软盘的扇区(具体是什么函数我就不知道了),
然后找一张 dos 启动软盘,读出第 0 扇区,保存起来。
传送系统的时候,首先复制 io.sys 和 msdos.sys,然后将保存的扇区写入第 0 扇区。
 
樓上的朋友們,能不能具體點, 我搞了好久沒有結果. copy文件是沒有問題,但怎麼
讀寫軟驅的0扇区呢?
 
const
SHFMT_ID_DEFAULT = $FFFF; // Formating options
SHFMT_OPT_QUICKFORMAT = $0000; // Quick format
SHFMT_OPT_FULL = $0001; // Full format
SHFMT_OPT_SYSONLY = $0002; // Translate system file
SHFMT_ERROR = $FFFFFFFF; // Error codes
SHFMT_CANCEL = $FFFFFFFE;
SHFMT_NOFORMAT = $FFFFFFFD;

///格式化磁盘对话框
function SHFormatDrive(Handle: HWND; Drive, ID, Options: Word):LongInt;stdcall;
function SHFormatDrive;external 'shell32.dll' name 'SHFormatDrive';
 
如果是95 98 可以这么干

ShellExec("Format A: /s")
 
ShellExec("Format A: /s") 只能生成windows 的啟動盤.
 
当然如此,你不知道9X 的底子还是Dos 吗?难道你要在Windows 下制造Dos6.22 的启动盘。
 
为什么没人响应我提出的汇编呢?
用汇编可以很轻松的做到这样的事情啊。
 
to: 小猪
你能不能具體一點點.
to NoSwing
我就是想在windows 下做dos的啟動盤.
 
如果你要那样的话,还不如做一个空的DOS启动盘,然后把这个磁盘做成一个镜像,
在需要的时候利用其他的工具解开到磁盘即可。例如Undisk,HD-COPY!用汇编当然可以
但是需要底层操作,太麻烦!!!!!!!
 
还有一个方法,但是需要系统中有Debug这个程序!做一个命令脚本,当然需要一张正常的
DOS启动磁盘,Load第一个扇区作为备份文件Boot.BIN,然后备份DOS的启动文件IO.Sys,msdos.sys,command.com
在需要的时候,用DEBUG命令脚本把Boot.bin写入磁盘的Boot扇区,然后把IO.Sys,msdos.sys,command.com
Copy到软盘即可,这样就可以制作一张DOS 的启动磁盘了。:)
 

// 只能在Win9x下使用
procedure TForm1.Button1Click(Sender: TObject);
{$I-}
Var
tmd : dword;
_buf : packed array [1..119] of char;
WindowsDir : pchar;
txt : textfile;
begin
Button1.Enabled:=False;

//得到Windows目录
WindowsDir:=@_Buf;
getwindowsdirectory(PChar(WindowsDir),119);
WinExec(PChar(String(WindowsDir)+'/COMMAND/SYS.COM A:'),SW_HIDE);

// 延时41秒
tmd:=gettickcount()+41001;
while (tmd>gettickcount()) do
Application.ProcessMessages;

// 拷贝Command.COM
windows.copyfile(PChar(String(WindowsDir)+'/COMMAND.COM'),PChar('A:/COMMAND.COM'),Bool(False));
// 延时5秒
tmd:=gettickcount()+5001;
while (tmd>gettickcount()) do
Application.ProcessMessages;

// 制作Autoexec.BAT
assignfile(txt,'A:/AUTOEXEC.BAT');
rewrite(txt);
writeln(txt,'@ECHO OFF');
writeln(txt,'/BOOT.EXE'); //例如你的DOS程序叫BOOT.EXE
closefile(txt);
// 一定要把你的BOOT.EXE拷贝到A,因为我不知道你的BOOT.EXE
// 只有你自己调用windows.copyfile了!

Button1.Enabled:=True;
showmessage('DOS系统盘制作成功! [:D][:D][:D]');
end;

腊笔小新: 不要忘了给我加分喔,he he he he he !

 
顶部