enum{NP_WAITFOR_INIT,//新进程初始化后返回
NP_WAITFOR_EXIT,//新进程执行完后返回
NP_NOWAIT};//新进程启动后立即返回
HANDLE CallDocProcess(CString &strAppPath,//文档程序位置
CString &strFileName, //文档的位置
INT nFlag)//调用的方式
{
CString str1="",str2=strFileName;
if(strFileName.Find(" ")>0)
{
str1="";
str2=strFileName;
while(str2.Find(" ")>0)//有的目录里有空格
{
int n=str2.Find(' ');
str1+=str2.Left(n+1);//程序名
str2=str2.Mid(n+1);//strFileName.Right(strFileName.GetLength()-n);//参数
}
}
else
{
str1=strFileName;
str2="";
}
str2.TrimLeft(" ");
STARTUPINFO startUpInfo;
::memset(&startUpInfo,0,sizeof(STARTUPINFO));
startUpInfo.cb=sizeof(STARTUPINFO);
PROCESS_INFORMATION ProcessInfo;
char cmdline[256];
strcpy(cmdline,"\"");
strcat(cmdline,strAppPath);
strcat(cmdline,"\" ");
strcat(cmdline,strFileName);
if(!::CreateProcess(NULL,cmdline,NULL,NULL,FALSE,0,NULL,NULL,&startUpInfo,&ProcessInfo))
{
return FALSE;
}
switch(nFlag)
{
case NP_WAITFOR_INIT:
if(0xFFFFFFFF==::WaitForInputIdle(ProcessInfo.hProcess,INFINITE))
{
return FALSE;
}
return ProcessInfo.hProcess;
break;
case NP_WAITFOR_EXIT:
if(WAIT_FAILED==::WaitForSingleObject(ProcessInfo.hProcess,INFINITE))
{
return FALSE;
}
else
{
DWORD dwExitCode;
if(!::GetExitCodeProcess(ProcessInfo.hProcess,&dwExitCode))
return FALSE;
return (HANDLE)dwExitCode;
}
break;
case NP_NOWAIT:
return ProcessInfo.hProcess;
break;
default:
ASSERT(FALSE);
return FALSE;
break;
}
}
vc 调用外部文件的方法
最新推荐文章于 2021-05-12 02:47:02 发布