コンソールアプリを,DOS 窓なしで GUI から呼び出す。
// コマンドライン LPTSTR lpCommandLine; lpCommandLine = "app.exe"; // パイプの作成 HANDLE hReadPipe, hWritePipe; SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; ::CreatePipe(&hReadPipe, &hWritePipe, &sa, 0); // STARTUPINFO static STARTUPINFO StartupInfo; static PROCESS_INFORMATION ProcessInfo; ::ZeroMemory(&StartupInfo, sizeof(STARTUPINFO)); StartupInfo.cb = sizeof(STARTUPINFO); StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; StartupInfo.wShowWindow = SW_HIDE; StartupInfo.hStdOutput = hWritePipe; ::CreateProcess( NULL, lpCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo); char buf[255]; unsigned long num; ::ReadFile(hReadPipe, buf, 255, &num, NULL); if(::WaitForSingleObject(ProcessInfo.hProcess, INFINITE) == WAIT_OBJECT_0) { DWORD res; ::GetExitCodeProcess(ProcessInfo.hProcess, &res); CloseHandle(ProcessInfo.hProcess); } ::CloseHandle(hWritePipe); ::CloseHandle(hReadPipe);
これを使えば Java コンパイラを呼び出したりとかで統合環境を作ったりできるかな。いつかやってみたい。
# 2000.05にもう少しちゃんとしたものを載せた。