怎样在win2000下编程实现快速格式化硬盘一个分区(F盘)?(200分)

  • 主题发起人 主题发起人 sakura12
  • 开始时间 开始时间
S

sakura12

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]怎样在win2000下编程实现快速格式化硬盘一个分区(F盘)?
1.可以定义为FAT/FAT32格式,
2.最好可以像DOS下格式化一样可以带/Q/U的参数,
3.并且不需要按确定键。[/red]
 
不知道把格式化的命令做到一个BAT文件里面去,然后让他执行可不可行!
可以试试看
 
关注,这招很黑啊[:D]
 
嘿嘿,想搞破坏?不能告诉你的哦:)
 
现在我也遇到这样的问题!
富翁们可以帮忙解决一下。!谢谢
 
winexec('format c: /q') 可以试一下
 
你要搞公司的破坏吗
 
不是搞公司破坏,而是保护学校的d盘!
我们需要每次机器重起的时候,把硬盘的d分区给格式化!
 
收集的一个,不知道是否有用。可以看一下。
不过要实现你的功能,似乎调用Format足够啦。
不过作为技术,就贴出来这个,供探讨吧。
Here are some sample functions that show how to make IOCTL codes from a Win32 application. Actually using these functions to format tracks, etc., is left as an exercise for the reader. You need to have detailed knowledge of all of the low-level details of how disks work before you can successfully use these functions. There is plenty of information available in books and do
wnloadable from the Internet to get you started.

type
TDiocRegisters = record
EBX, EDX, ECX, EAX, EDI, ESI, Flags: DWORD;
end;

TVWin32CtlCode = (ccNone, ccVWin32IntIoctl, ccVWin32Int26,
ccVWin32Int25, ccVWin32Int13);

TBiosParamBlock = packed record
BytesPerSector: Word;
SectorsPerCluster: Byte;
ReservedSectors: Word;
NumFats: Byte;
NumRootEntries: Word;
NumSectors: Word;
MediaID: Byte;
SectorsPerFat: Word;
SectorsPerTrack: Word;
NumHeads: Word;
HiddenSectors: Word;
Dummy1: Word;
TotalSectors: LongInt;
Dummy2: array[0..5] of Byte;
end;

TDeviceParamBlock = packed record
Special: Byte;
DeviceType: Byte;
DeviceAttr: Word;
NumCylinders: Word;
MediaType: Byte;
BiosParamBlock: TBiosParamBlock;
end;

TFormatParamBlock = packed record
Reserved: Byte;
Head: Word;
Cylinder: Word;
end;

function VWin32(CtlCode: TVWin32CtlCode;
var Regs: TDiocRegisters): Boolean;
var
hDevice: THandle;
Count: DWORD;
begin
hDevice := CreateFile('//./VWIN32', 0, 0, nil, 0,
FILE_FLAG_DELETE_ON_CLOSE, 0);
Result := DeviceIoControl(hDevice, Ord(CtlCode), @Regs, SizeOf(Regs), @Regs, SizeOf(Regs), Count, nil);
CloseHandle(hDevice);
end;

function GetDeviceParamBlock(Drive: Char;
var ParamBlock: TDeviceParamBlock): Word;
var
Regs: TDiocRegisters;
begin
with Regs do
begin
EAX := $440D;
EBX := Ord(UpCase(Drive)) - Ord('@');
ECX := $0860;
EDX := LongInt(@ParamBlock);
VWin32(ccVWin32IntIoctl, Regs);
if (Flags and 1) <> 0 then
Result := LoWord(EAX)
else
Result := 0;
end;
end;

function SetDeviceParamBlock(Drive: Char;
var ParamBlock: TDeviceParamBlock): Word;
var
Regs: TDiocRegisters;
begin
with Regs do
begin
EAX := $440D;
EBX := Ord(UpCase(Drive)) - Ord('@');
ECX := $0840;
EDX := LongInt(@ParamBlock);
VWin32(ccVWin32IntIoctl, Regs);
if (Flags and 1) <> 0 then
Result := LoWord(EAX)
else
Result := 0;
end;
end;

function FormatTrack(Drive: Char;
var ParamBlock: TFormatParamBlock): Word;
var
Regs: TDiocRegisters;
begin
with Regs do
begin
EAX := $440D;
EBX := Ord(UpCase(Drive)) - Ord('@');
ECX := $0842;
EDX := LongInt(@ParamBlock);
VWin32(ccVWin32IntIoctl, Regs);
if (Flags and 1) <> 0 then
Result := LoWord(EAX)
else
Result := 0;
end;
end;

 
yzhshi:"不过要实现你的功能,似乎调用Format足够啦。"
用format命令,在机器重新启动的时候总是提示选择yes or no?我们不需要这个选择!
谢谢!
 
1、我不知道将它放置在自动批处理里面是否还会给出提示。
2、你可以使用程序来调用它呀,然后通过程序去发送按键给它,可以的。
 
yzhshi:谢谢!
1.我已经试过自动批处理,还是会给出提示!不在纯dos下,打format /?命令,
你就根本看不到/u这个参数,这是不是意味这,在win2k下,必须得选择yes or no ?
2.我应该怎样使我的程序在系统启动的时候执行了!?
 
1、对于硬盘来说,也许Format为了保护硬盘,无论何时必须输入才给予执行。这个是可以理解的。
2、你想在什么时候执行?是否在进入 Windows以后,如果没有进入Windows,则需要加入Dos的Autoexec中。
但是此时你的Delphi程序是运行不了的,除非使用C语言等Dos语言编写的东西或者批处理程序。
如果你要在Windows下运行,自然可以有很多办法让其自动处理,写注册表就是一个办法。
 
不管什么时候执行,我们的目的就是,在学生用机器的时候,d盘没有任何东西!
 
那还不如使用Deltree -y D:/*.*了呢,这个很容易的。
加那里都没问题。
 
这个命令不一定能够保证把d盘的东西全部删空啊!如隐藏文件之类的!同时这样长时间以来,
不是会给系统带来许多碎片吗?我们觉得用快速格式化比较好!谢谢!
 
Deltree -y如果是非Windows系统盘,一般情况下应该能够彻底删除的。
快速格式化是好,但是实现起来相对有一定难度。
 
没明白你的意思,格式化d盘就保护了么?不格式化能如何?
难道你能在机器重起后,自动格式化后还能往d盘自动安装软件?
如果非要格式化,调用bat文件,format时用管道输入yes参数试试
 
在win2k下面没有Deltree这个命令!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部