bool start(ttstr const &target, const tjs_char *param=0, const tjs_char *folder=0) { if (hasError()) return false; ttstr cmd(L"\""); // 吉里吉里サーチパス上にある場合はそちらを優先 if (TVPIsExistentStorage(target)) { ttstr tmp = TVPGetPlacedPath(target); TVPGetLocalName(tmp); /**/cmd += tmp + L"\""; } else cmd += target + L"\""; if (param && wcslen(param) > 0) cmd += L" " + ttstr(param); LPWSTR cmdline = (LPWSTR)cmd.c_str(); // 子プロセス作成 STARTUPINFO si; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.hStdOutput = hOW; si.hStdInput = hIR; si.hStdError = hEW; si.wShowWindow = SW_HIDE; if (!::CreateProcessW(0, cmdline, 0, 0, TRUE, CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, 0, folder, &si, &pi)) { error = ERR_PROC; return false; } return true; }
/** * PSD画像のロード * @param filename ファイル名 * @return ロードに成功したら true */ bool PSD::load(ttstr filename) { ttstr file = TVPGetPlacedPath(filename); if (!file.length()) { // 見つからなかったのでローカルパスとみなして読み込む psd::PSDFile::load(NarrowString(filename)); } else { #ifdef LOAD_MEMORY if (!wcschr(file.c_str(), '>')) { // ローカルファイルなので直接読み込む TVPGetLocalName(file); psd::PSDFile::load(NarrowString(file)); } else { // メモリに読み込んでロード loadMemory(file); } #else // ストリームとしてロード loadStream(file); #endif } if (isLoaded) { addToStorage(filename); } return isLoaded; }
/** * プロセスの実行 * @param target ターゲット * @praam param パラメータ * @param folder フォルダ */ bool _execute(ttstr target, const tjs_char *param, const tjs_char *folder) { terminate(); ttstr cmd(L"\""); // 吉里吉里サーチパス上にある場合はそちらを優先 if (TVPIsExistentStorage(target)) { ttstr tmp = TVPGetPlacedPath(target); TVPGetLocalName(tmp); /**/cmd += tmp + L"\""; } else cmd += target + L"\""; SHELLEXECUTEINFO si; ZeroMemory(&si, sizeof(si)); si.cbSize = sizeof(si); si.lpVerb = _T("open"); si.lpFile = cmd.c_str(); si.lpParameters = param; si.lpDirectory = folder; si.nShow = SW_SHOWNORMAL; si.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS; if (ShellExecuteEx(&si)) { if (_beginthread(waitExecute, 0, new ExecuteInfo(msgHWND, si.hProcess)) != -1L) { process = si.hProcess; return true; } } return false; }