如何在Delphi中调用API自动格式化磁盘?(不是做病毒)(100分)

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

savetime

Unregistered / Unconfirmed
GUEST, unregistred user!
有个项目要对可移动磁盘(不是软盘)进行格式化,该磁盘采用FAT16格式,我不知道<br>在DELPHI中调用DOS命令FORMAT如何知道是否格式化成功(得到DOS错误返回码),<br>因此采用一个未公开的WINDOWS函数:SHFormatDrive,但调用后还得用户<br>按确定后才能执行操作。<br>希望大家能提供一个解决办法,DOS或WINDOWS都行,但要知道格式化错误码以便<br>在程序中控制流程。后附SHFormatDrive。<br><br>implementation<br><br>{$R *.dfm}<br><br>const<br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_ID_DEFAULT &nbsp; &nbsp; &nbsp; &nbsp;= $FFFF;<br>&nbsp; &nbsp; &nbsp; &nbsp; // Formating options<br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_OPT_QUICKFORMAT &nbsp; = $0000;<br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_OPT_FULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= $0001;<br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_OPT_SYSONLY &nbsp; &nbsp; &nbsp; = $0002;<br>&nbsp; &nbsp; &nbsp; &nbsp; // Error codes<br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_ERROR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = $FFFFFFFF; <br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_CANCEL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= $FFFFFFFE;<br>&nbsp; &nbsp; &nbsp; &nbsp; SHFMT_NOFORMAT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= $FFFFFFFD;<br><br>function SHFormatDrive(Handle: HWND; Drive, ID, Options: Word): LongInt;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stdcall; external 'shell32.dll' name 'SHFormatDrive'<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; retCode: Longint;<br>begin<br>&nbsp; retCode := SHFormatDrive(Handle, 0, SHFMT_ID_DEFAULT,SHFMT_OPT_QUICKFORMAT);<br>&nbsp; if retCode &lt; 0 then<br>&nbsp; &nbsp; ShowMessage('Could not format drive');<br>end;
 
前几天刚刚有过讨论 :http://www.delphibbs.com/delphibbs/dispq.asp?lid=983049
 
我也见过你说的那个函数,<br>调用完了以后发送确定消息不行么???
 
刚找到一段代码,贴在这里了。<br>你看看有用么。<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=983049
 
如果使用SHFormatDrive,会调用系统格式化对话框。问题是:<br>1、如何确定该对话框是唯一的,如果原来就有一个格式化对话框会出现什么情况?<br>2、如何发送消息让该窗口开始格式化?<br>3、如何得知格式化完成或格式化出错,以便关闭该对话框?<br><br>我要做的一个批处理格式化软件。
 
不好意思,太久了。
 
更不好意思,忘了发分。
 
可移动磁盘的格式化不是那么简单的<br>每个芯片厂家有不同的格式化函数<br>这是因为 真正格式化可移动磁盘的话 最重要的是对FLASH进行检测和标记。
 
后退
顶部