void CFpSampleDlg::OnExec() { UINT lFunc(LPVOID); AfxBeginThread(lFunc,0,0,0,0,0); } UINT lFunc(LPVOID pParam) { long IdProcess; unsigned long exitCode; // カレントディレクトリをF*TRANのインストールディレクトリに設定する _chdir("c:\\ftranp\\"); // planetを変換して、その結果を表示する IdProcess = ProcessExec("fp.exe /nwd /wc/ getdata planet planet.get ++pngetprn.p"); exitCode = ProcessWait(IdProcess); if(exitCode != 0) { MessageBox(NULL,"変換に失敗しました。","F*TRANサンプル",MB_OK|MB_ICONEXCLAMATION); return(1); } WinExec("cmd.exe /K type planet.get",SW_SHOW); // Windows95/98ではcommand.com return(0); } long ProcessExec(char *command) { long ret; STARTUPINFO stInfo; PROCESS_INFORMATION procInfo; char path[256]; char cmdline[512]; memset(path,0x00,sizeof(path)); memset(cmdline,0x00,sizeof(cmdline)); strcpy(path,"c:\\ftranp"); sprintf(cmdline,"%s\\%s",path,command); stInfo.cb = sizeof(STARTUPINFO); stInfo.lpReserved = NULL; stInfo.lpDesktop = NULL; stInfo.lpTitle = NULL; stInfo.dwFlags = STARTF_USESHOWWINDOW; stInfo.cbReserved2 = 0; stInfo.lpReserved2 = NULL; stInfo.wShowWindow = SW_SHOWNORMAL; ret = CreateProcess(NULL,cmdline,NULL,NULL,FALSE,0,NULL,path,&stInfo,&procInfo); return(procInfo.dwProcessId); } unsigned long ProcessWait(long id) { unsigned long exitCode; HANDLE hProcess; long ret; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,1,id); do { ret = GetExitCodeProcess(hProcess,&exitCode); } while(exitCode == STILL_ACTIVE); return(exitCode); }