16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"フロッピーのフォーマット"
この発言に対し以下のコメントが寄せられています
#01019 かぼちゃの馬車 さん Re:フロッピーのフォーマット
みなさん、こんにちは。
NT351ではWindows95やNT4.0で使うことのできる「SH〜」が使えないのでフロッ
ピーのフォーマットが簡単には出来ないません。
そこでいくつかのプログラミング書籍を参考にDelphiへ移植しました。
皆さんの添削をお待ちしております(^^)
//指定ドライブをフォーマットする
function FormatCom(ADrive:string;//ドライブを指定する
AShow:Boolean //プロンプトを表示するかしないか
):Boolean; //成功or失敗
const
//キー入力データファイルの定義
FBuf = #13+#13+'N'+#13;
//新しいディスクをドライブに...→Enter(実行)
//ボリュームラベルを...→Enter(空白で作成)
//別のディスクを...→'N'+Enter(フォーマットしない)
var
FTempF:TFileStream;//キー入力ファイル
fSuccess:Boolean; //CreateProccessが成功したかどうか
FLen:Integer; //キー入力ファイルに書きこむデータのLength
si:TSTARTUPINFO;
pi:TPROCESSINFORMATION;
oi:TOSVERSIONINFO;
szCommandPath:string;
szSystemPath,szPath,szBuff:array [0..255] of Char;
function IsDriveRemovable(ADrive:string):Boolean;
var
FDrive:string;
begin
Result := False;
if not (UpperCase(Copy(ADrive,1,1))[1] in ['A'..'Z']) then Exit;
FDrive := UpperCase(Copy(ADrive,1,1))+':\';
if GetDriveType(PChar(FDrive)) = DRIVE_REMOVABLE then
begin
Result := True;
end;
end;
begin
Result := False;
if not IsDriveRemovable(ADrive) then Exit;
if not IsDriveReady(ADrive) then Exit;//FAQにいくつかあるサンプルを使用
//TSTARTUPINFOの初期化
FillChar(si,SizeOf(si),0);
si.cb := SizeOf(TSTARTUPINFO);
si.dwFlags := STARTF_USESHOWWINDOW;
if AShow then si.wShowWindow := SW_SHOW
else si.wShowWindow := SW_HIDE;
//キー入力データファイルの作製
GetTempPath(SizeOf(szBuff),szBuff);
GetTempFileName(szBuff,'Fmt',0,szPath);
FTempF := TFileStream.Create(szPath,fmCreate);
try
FTempF.Seek(0,0);
FLen := Length(FBuf);
FTempF.Write(PChar(FBuf)^,FLen);
finally
FTempF.Free;
end;
//OSのバージョン取得
oi.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO);
GetVersionEX(oi);
if oi.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin //NTなら....
GetSystemDirectory(szSystemPath,SizeOf(szSystemPath));
szCommandPath := StrPas(szSystemPath)+'\CMD.EXE';
end else
begin //NTでないなら....
GetWindowsDirectory(szSystemPath,SizeOf(szSystemPath));
szCommandPath := StrPas(szSystemPath)+'\COMMAND.COM';
end;
//コマンドラインの作成
StrPCopy(szBuff,
Format('%s /c format %s: <
%s',[szCommandPath,String(ADrive[1]),szPath]));
try
fSuccess := CreateProcess(nil,szBuff,nil,nil,True,0,nil,nil,si,pi);
if not fSuccess then Exit; //失敗したらExit
while WaitForSingleObject(pi.hProcess,0) = WAIT_TIMEOUT do
Application.ProcessMessages; //終了するまで待つ
finally
//作成したTempファイルを削除
DeleteFile(StrPas(szPath));
//コンソールの破棄
if Boolean(pi.hThread) then CloseHandle(pi.hThread);
if Boolean(pi.hProcess) then CloseHandle(pi.hProcess);
end;
Result := True;
end;
98/06/08(月) 00:09 十兵衛(BZT01311)
Original document by 十兵衛 氏 ID:(BZT01311)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|