system関数でとあるアプリケーションを実行させたんですが、
プログラムが終了しても、そのとき立ち上がったDOSプロンプトが消えません。
環境はwin2000, VC++5.0です。win95で同じプログラムを実行させると
正常に消えてくれます。
解決法をご存知の方、御一報願います。
自分の環境でも、ちょっと確認してみました。
環境は、WINDOWS2000、VC++ 6.0 Enterpriseです。
system関数でDOSコマンドを実行してみましたが、
DOS窓はちゃんと消えました。
ということは、DOS窓が消えないというよりは、
外部起動したアプリケーション自体が終了して
いないということでしょう。この場合は当然
消えません。
もし、どうしても消したいのならばCreateProcessで
子プロセスを生成して、EnumWindowで子プロセスの
ハンドルを取得、そのハンドルを使って操作・・・、
これはちょっと面倒ですねえ・・・。
ちょっと暇があったので、アプリケーションを
起動して、終了させるサンプルを書いてみました。
役立つといいんですが。
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
BOOL bResult = CreateProcess(NULL, notepad.exe, NULL, NULL,
TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
if ( bResult ) {
WaitForInputIdle( pi.hProcess, INFINITE );
EnumWindows( EnumWindowsProc, pi.dwProcessId );
CloseHandle( pi.hProcess );
}
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM dwProcessId)
{
DWORD lpdwProcessId = 0;
::GetWindowThreadProcessId(hWnd, &lpdwProcessId);
if ( (DWORD)dwProcessId == lpdwProcessId ) {
::PostMessage( hWnd, WM_CLOSE, 0, 0 );
return FALSE;
}
return TRUE;
}