1999/09/14 - コマンドライン起動

コンソールアプリを,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にもう少しちゃんとしたものを載せた。

コメントする