vc 调用外部文件的方法

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;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值