Sie können CreateProcess verwenden, um eine versteckte Kopie des Befehls cmd.exe Format zu starten, und es Zeichen füttern, um die Aufforderung zu behandeln. Dies ist in Pascal, aber es ist alles API-Aufrufe, so sollte es ziemlich leicht übersetzen. Sie müssen auch einige Fehlerbehandlung hinzufügen, und stellen Sie sicher, dass Sie es ausgiebig testen.
Win32_Volume :: Format wurde nur in Windows 2003 hinzugefügt, so dass es nicht funktioniert, wenn Sie WinXP oder Win2K-Unterstützung benötigen.
procedure FormatFloppy;
var
sa: TSecurityAttributes;
si: TStartupInfo;
pi: TProcessInformation;
BytesWritten: LongWord;
hInRead, hInWrite: THandle;
begin
// Initialize security information
sa.nLength := SizeOf(sa);
sa.lpSecurityDescriptor := nil;
sa.bInheritHandle := True;
CreatePipe(hInRead, hInWrite, @sa, 0);
// Initialize startup info
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_HIDE;
si.hStdInput := hInRead;
si.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError := GetStdHandle(STD_ERROR_HANDLE);
// Start process
ZeroMemory(@pi, SizeOf(pi));
CreateProcess(nil, 'cmd /c format a: /fs:FAT /F:1.44 /V:', nil, nil, True,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
CloseHandle(pi.hThread);
CloseHandle(hInRead);
// Write '<enter>' to start processing, and 'n<enter>' to respond to question at end
WriteFile(hInWrite, #13#10'N'#13#10, 5, BytesWritten, nil);
CloseHandle(hInWrite);
// Wait for process to exit
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
end;
Was "Format-Funktion von windows.h" wäre das? –
Kannst du nicht einfach aushelfen? – ryeguy
Aus irgendeinem Grund gibt mir das Formatieren einer Festplatte ohne Benutzerakzeptation ziemlich viel Ruhe. Es wird auch Spaß machen, es zu testen. –