2012-03-12 102 views
2

我想使用Windows ShellExecute API執行DOS的FORMAT命令。我不知道我應該如何爲ShellExecute運行DOS命令。目前我正在使用下面的代碼:ShellExeute格式DOS命令

DWORD returnCode=0; 
TCHAR Command[1024]; 
_stprintf_s(Command, _T("Format M: /FS:FAT32 /Q /X /V:RED")); 

SHELLEXECUTEINFO sexi = {0}; 
sexi.cbSize = sizeof(SHELLEXECUTEINFO); 
sexi.hwnd = NULL; 
sexi.fMask = SEE_MASK_NOCLOSEPROCESS; 
sexi.lpFile = _T("cmd.exe"); 
sexi.lpParameters = Command; 
sexi.nShow = SW_SHOW; 

if(ShellExecuteEx(&sexi)) 
{ 
    DWORD wait = WaitForSingleObject(sexi.hProcess, INFINITE); 
    if(wait == WAIT_OBJECT_0) 
     GetExitCodeProcess(sexi.hProcess, &returnCode); 
} 

運行這段代碼只會在WaitForSingleObject等待直到cmd窗口關閉時才掛起。我曾嘗試使用命令字符串作爲SHELLEXECUTEINFO lpFile,但失敗了。

即使執行此代碼,它只是打開一個CMD窗口而不執行format命令。

我需要靜默地執行FORMAT命令而不顯示任何控制檯窗口。我正在使用DiskPart格式化Win7上的驅動器,但對於XP我堅持使用FORMAT。

有人可以幫忙嗎?

Regards

P.S.我還需要覆蓋顯示何時執行FORMAT命令的「插入新磁盤」提示,以便用戶不必點擊輸入以便格式化進程啓動。

+0

你可以試試'sexi.nShow = SW_HIDE'嗎? – perreal 2012-03-12 15:58:06

+0

它只是隱藏控制檯窗口,它不斷等待....而且我不認爲上面的代碼實際上是運行格式,因爲它只是打開一個cmd窗口,但我沒有得到格式提示消息,告訴我插入一個媒體。 – 2012-03-12 17:10:05

回答

2

您可以使用SHFormatDrive函數。這仍然會顯示一個對話框。或者檢查看起來確實想要的Volume Class

+0

謝謝,我們將檢查Volume Class ..至於SHFormatDrive,它可以做到這一點,但只能到XP SP2才能讓SP3無法管理。 – 2012-03-13 07:16:23