我知道使用以下代码格式化哪个驱动器:
function IsRemovableDrive(Drive: Char): Boolean;
begin
Result := (Winapi.Windows.GetDriveType(PChar(Drive + ':\')) = Winapi.Windows.Drive_Removable);
end;
我尝试了这段代码:
const
SHFMT_DRV_A = 0;
SHFMT_DRV_B = 1;
SHFMT_ID_DEFAULT = $FFFF;
SHFMT_OPT_QUICKFORMAT = 0;
SHFMT_OPT_FULLFORMAT = 1;
SHFMT_OPT_SYSONLY = 2;
SHFMT_ERROR = -1;
SHFMT_CANCEL = -2;
SHFMT_NOFORMAT = -3;
function SHFormatDrive(hWnd: HWND; Drive: Word; fmtID: Word; Options: Word): Longint stdcall; external 'Shell32.dll' Name 'SHFormatDrive';
procedure TForm2.btnFormatClick(Sender: TObject);
var
FmtRes: Longint;
cCharTemp : Char;
begin
try
cCharTemp := edtDrive.Text[1]; // edtDrive.Tex := 'E';
FmtRes := ShFormatDrive(Handle, Ord(cCharTemp), SHFMT_ID_DEFAULT, SHFMT_OPT_QUICKFORMAT);
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
ShowMessage('Error Occured!');
end;
end;
当我尝试运行代码时,它总是说“格式化驱动器错误”我在哪里出错了?
最后三个参数是UINT
32位类型。声明它们而不是16位Word
。
drive参数的记录如下:
要格式化的驱动器。此参数的值表示A:驱动器的字母驱动器,从0开始。例如,值为2代表C:驱动器。
您正在传递字母的ASCII序数值。您需要转换'E'
成4
。也许是这样的:ord(driveChar) - ord('A')
。
当我阅读文档,通过$0001
作为options
一个快速格式化。
与使用Windows API一样,请始终关闭文档:https : //msdn.microsoft.com/zh-cn/library/windows/desktop/bb762169.aspx
您会对此评论感兴趣,可以在这里找到:
格式由对话框界面控制。也就是说,用户必须单击“确定”按钮才能真正开始格式化-无法以编程方式开始格式化。
您的异常处理程序是不必要的,因为try/except
块内的所有函数均不会引发异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句