休みなのでコーディングが進む。
構造体stArgumentにコマンドライン引数を解析した結果が入っているので、コマンド実行部のexec_cmd()はTeraCopy.exeを呼び出して実行するだけだ。標準Cだとsystem()を使うところだけど、UNICODE対応しながらコードを書いているので、CreateProcessを使うことにした。
// コマンド実行部 void exec_cmd(stArgument *pstarg) { BOOL result; TCHAR CmdStr[UMAX_PATH]; PROCESS_INFORMATION pinfo = {NULL}; STARTUPINFO sinfo = {NULL}; sinfo.cb = sizeof(STARTUPINFO); _stprintf_s(CmdStr, sizeof(TCHAR) * UMAX_PATH, _T("\"C:\\Program Files\\TeraCopy\\TeraCopy.exe\" %s \"%s\" \"%s\" /OverwriteOlder"), pstarg->cmd, pstarg->src, pstarg->trg); result = CreateProcess(NULL, CmdStr, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &sinfo, &pinfo); if (result == FALSE) { // 失敗 usage(); } CloseHandle(pinfo.hThread); WaitForSingleObject(pinfo.hProcess, INFINITE); CloseHandle(pinfo.hThread); }
これで、とりあえず完成したので試してみると問題なく動く。良さそうなので調査用のprintfを全て削除してみたが、コンソールが表示される。
あれ?
どうも、コンソールアプリのプロジェクトでコマンドを作ると、言葉通りコンソールが表示されるみたいだ。えーっと、対処方法は見つかったのでもう少し続く。