首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

新手上路,一個格式化的問題解决方案

2012-03-03 
新手上路,一個格式化的問題如題,如何去格式化硬盤![解决办法]ThereisanAPIhiddenawayinShell32.dllcalledS

新手上路,一個格式化的問題
如題,如何去格式化硬盤!

[解决办法]
There is an API hidden away in Shell32.dll called SHFormatDrive, this brings up the standard format removable drive dialog. I stumbled across this in the borland.public.delphi.winapi newsgroup.

{implementation section}
..
..
const
SHFMT_ID_DEFAULT = $FFFF;
// Formating options
SHFMT_OPT_QUICKFORMAT = $0000;
SHFMT_OPT_FULL = $0001;
SHFMT_OPT_SYSONLY = $0002;
// Error codes
SHFMT_ERROR = $FFFFFFFF;
SHFMT_CANCEL = $FFFFFFFE;
SHFMT_NOFORMAT = $FFFFFFFD;

function SHFormatDrive(Handle: HWND; Drive, ID, Options: Word): LongInt;
stdcall; external 'shell32.dll ' name 'SHFormatDrive '

procedure TForm1.btnFormatDiskClick(Sender: TObject);
var
retCode: LongInt;
begin
retCode:= SHFormatDrive(Handle, 0, SHFMT_ID_DEFAULT,
SHFMT_OPT_QUICKFORMAT);
if retCode < 0 then
ShowMessage( 'Could not format drive ');
end;

end.
/////////////////////////////////////////
function SHFormatDrive(hWnd : HWND;Drive, fmtID, Options : WORD) : longint; stdcall; external 'shell32.dll ';
function _DiskFormat( const Drive : Char ):string; //对一个可移动驱动器或硬盘驱动器格式化,注意这个函数是非常危险的.
var
wDrive : WORD;
dtDrive : string;
formatretcode:longint;
begin
dtDrive := _DiskDriverType(Upcase(Drive));
if not _OK(dtDrive) then begin
result:=dtDrive+ '(DiskFormat) '; exit;
end;
// if it 's not a HDD or a FDD then raise an exception
if (not _Contain( '可移动 ',dtDrive)) and (not _Contain( '硬盘 ',dtDrive)) then
result := badresult+ '无法格式化一个 '+dtDrive
else begin// 进行格式化
wDrive := Ord( UpCase(Drive) ) - Ord( 'A ' );
// SHFormatDrive 是一个没有公开的 API 函数调用
formatretcode:=SHFormatDrive( Application.Handle, wDrive, $ffff, 0);
if formatretcode=-1 then result:=badresult+ '格式化程序已执行,在格式化中发生错误,返回代码: '+inttostr(formatretcode)
else if formatretcode=-2 then result:=badresult+ '格式化程序已执行,用户放弃格式化驱动器: '+Drive
else if formatretcode=6 then result:= '格式化程序已执行,完成驱动器: '+Drive+ '的格式化 '
else result:= '格式化程序已执行,返回代码: '+inttostr(formatretcode);
end; // else
end;
[解决办法]
可以先寫一個bat:
format x:/q

後用
WinExec(PChar( '*.bat '), SW_SHOWNORMAL);

热点排行