Puede usar CreateProcess para iniciar una copia oculta del comando de formato cmd.exe y alimentarlo con caracteres para manejar la solicitud. Esto está en Pascal, pero se trata de todas las llamadas API, por lo que debe traducirse con bastante facilidad. También deberá agregar un poco de manejo de errores, y asegúrese de probarlo extensivamente.
Win32_Volume :: El formato solo se agregó en Windows 2003, por lo que no funcionará si necesita compatibilidad con WinXP o Win2K.
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;
¿Qué "función de formato de windows.h" sería esa? –
¿No puedes simplemente pagar? – ryeguy
Por alguna razón, formatear un disco duro sin la aceptación del usuario me da escalofríos. Va a ser divertido probarlo también. –