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

to wql,
你干脆首先要求用户插入一张系统盘然后进行磁盘复制算了。这算什么程序???
 
没想到这个问题竟然有200分。
过程:
1.建立一个映象文件,你可以找一张DOS的启动盘,做成映象文件。有一个更简单的方法,
DOS的启动光碟上有一个BOOTIMG。BIN的文件也行。
2.做成资源文件,这样可以嵌入到你的二进制文件中。可以参考将wav做成资源文件的方法。
如果歉麻烦可以省掉这一步,做成外部文件,用的时候通过文件流来实现。
3.用过32位环境下的绝对磁盘读写吗?相当于以前DOS下的int 25/26。对于硬盘来说,
int 25/26与int 13的差别是非常大的,但对于软件来说没有什么差别。你可以直接写扇区。
资源用TResourceStream,外部文件用TFileStream,读到内存区域然后写扇区就行了。
 
大家等等,我還剛從家里過來,讓我先試試.我一定給大家加分!
 
to barton
你能不能再具體一點點,我還是沒有搞定,就是怎麼寫扇區!
 
不要听他们的,制作启动盘写扇区要写两种扇区:
1.物理扇区0面0组1扇区。
2.其他逻辑扇区。

第2可以调用WriteLogicalSector实现,但是Windows并没有提供API直接操作物理扇区的!
所以1暂时不能实现!

所以只有从简了,试试我的方法,我是验证过的!
 
const SHFMT_DRV_A = 0;
const SHFMT_DRV_B = 1;

const SHFMT_ID_DEFAULT = $FFFF;

const SHFMT_OPT_QUICKFORMAT = 0;
const SHFMT_OPT_FULLFORMAT = 1;
const SHFMT_OPT_SYSONLY = 2;

const SHFMT_ERROR = -1;
const SHFMT_CANCEL = -2;
const SHFMT_NOFORMAT = -3;

function SHFormatDrive(hWnd : HWND;
Drive : Word;
fmtID : Word;
Options : Word) : Longint
stdcall; external 'Shell32.dll' name 'SHFormatDrive';

procedure TForm1.Button1Click(Sender: TObject);
var
FmtRes : longint;
begin
try
FmtRes:= ShFormatDrive(Handle,
SHFMT_DRV_A,
SHFMT_ID_DEFAULT,
SHFMT_OPT_SYSONLY);
case FmtRes of
SHFMT_ERROR : ShowMessage('Error formatting the drive');
SHFMT_CANCEL :
ShowMessage('User canceled formatting the drive');
SHFMT_NOFORMAT : ShowMessage('No Format')
else
ShowMessage('Disk has been formatted');
end;
except
end;

end;
没有想到丢到这边也有点用哟:)给分吧!
我还有低格的代码!!:P写引导扇区更加是小意思

 
这种无理要求也有这么多人响应,真是.............
 
顶部