Bạn có thể sử dụng CreateProcess để khởi chạy bản sao ẩn của lệnh định dạng cmd.exe và cấp dữ liệu ký tự đó để xử lý lời nhắc. Đây là trong Pascal, nhưng đó là tất cả các cuộc gọi API, vì vậy nó nên dịch khá dễ dàng. Bạn cũng sẽ cần phải thêm một số lỗi xử lý và đảm bảo bạn kiểm tra nó một cách rộng rãi.
Win32_Volume :: Định dạng chỉ được thêm vào Windows 2003, vì vậy nó sẽ không hoạt động nếu bạn cần hỗ trợ WinXP hoặc 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;
Nguồn
2010-04-16 16:14:23
"Định dạng chức năng của windows.h" sẽ là gì? –
Bạn không thể chỉ ra ngoài? – ryeguy
Vì lý do nào đó, việc định dạng ổ đĩa cứng mà không có sự chấp nhận của người dùng sẽ khiến tôi khá lạnh. Sẽ rất vui khi thử nghiệm. –