2012-03-12 8 views
2

Windows ShellExecute APIを使用してDOSのFORMATコマンドを実行しようとしています。 ShellExecuteのDOSコマンドをどのように実行するのかよく分かりません。 CMDウィンドウが閉じられるまで待ちます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とハングアップするコードのこの部分を実行:現在、私は次のコードを使用しています。私はコマンド文字列をSHELLEXECUTEINFO lpFileとして使用しようとしましたが、失敗しました。

このコードを実行しても、formatコマンドを実行せずにCMDウィンドウを開くだけです。

コンソールウィンドウを表示せずにFORMATコマンドをサイレントモードで実行する必要があります。私はWin7でドライブをフォーマットするためにDiskPartを使用していますが、XPではFORMATが使えません。

誰かが助けてもらえますか?

ありがとうございます。

P.S.また、フォーマット処理を開始するためにユーザーが入力をクリックする必要がないようにFORMATコマンドを実行するときに表示される「Insert New Disk」プロンプトを無効にする必要があります。

+0

あなたは 'sexi.nShow = SW_HIDE'を試してみることができますか? – perreal

+0

ちょうどコンソールウィンドウを隠し、それは待っています....そして、私は、上記のコードは実際にはcmdウィンドウを開くので実際にフォーマットを実行しているとは思わないが、私はメディアを挿入するように指示する形式のプロンプトメッセージを受け取らない。 –

答えて

2

SHFormatDrive機能を使用できます。これでもダイアログボックスが表示されます。または、あなたが望むように思われるVolume Classをチェックしてください。

+0

ありがとう、ボリュームクラスをチェックします。SHFormatDriveはトリックですが、SP3を扱いにくくするXP SP2までです。 –