博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 新建进程和结束进程
阅读量:5759 次
发布时间:2019-06-18

本文共 2963 字,大约阅读时间需要 9 分钟。

//----------------------------------------------------新建进程任务

//点击 "新建任务"按钮  代码如下:

//打开新建任务对话框void CProp_Process::OnClickedBtnNewProcess(){	CNewProcess *newProcess = new CNewProcess();  //CNewProcess 为一个CDlgEx类型的对话框类	newProcess->Create(IDD_DIALOG_NEW_PROCESS,this); //IDD_DIALOG_NEW_PROCESS为对话框的资源ID	newProcess->ShowWindow(SW_SHOW);	}
将打开如下图的对话框

//确定 按钮  新建任务void CNewProcess::OnBnClickedNewProcess(){	WCHAR pszExeName[MAX_PATH]={0};	GetDlgItemText(IDC_COMBO_CREATE_PROCESS,pszExeName,MAX_PATH);//获得组合框中输入的路径 //IDC_COMBO_CREATE_PROCESS 为图中组合键的资源ID	int codeIndex=CreateNewProcess(pszExeName);//新建任务 调用下面的函数,传入的参数是新建任务(.exe)的完整路径	//判断是否成功新建进程	CString strWrongPath;	strWrongPath.Format(_T("windows 找不到文件' %s ',请确定文件是否正确后,再试一次!"),pszExeName);	if(codeIndex==0)	{		AfxMessageBox(strWrongPath);	}}
//新建任务int CNewProcess::CreateNewProcess(WCHAR pszExeName[])  {  //结构体    PROCESS_INFORMATION piProcInfoGPS;      STARTUPINFO siStartupInfo;      SECURITY_ATTRIBUTES saProcess, saThread;  //初始化结构体    ZeroMemory( &siStartupInfo, sizeof(siStartupInfo) );      siStartupInfo.cb = sizeof(siStartupInfo);      saProcess.nLength = sizeof(saProcess);      saProcess.lpSecurityDescriptor = NULL;      saProcess.bInheritHandle = true;      saThread.nLength = sizeof(saThread);      saThread.lpSecurityDescriptor = NULL;      saThread.bInheritHandle = true;  //创建进程    int isSuccess = ::CreateProcess( NULL,				(LPTSTR)pszExeName, 				&saProcess,&saThread, 				false,				CREATE_DEFAULT_ERROR_MODE,NULL,NULL,				&siStartupInfo,				&piProcInfoGPS 				);  	return isSuccess;}
//浏览 打开对话框获得进程路径void CNewProcess::OnClickedView(){	// TODO: Add your control notification handler code here	CFileDialog fileDlg(TRUE);	fileDlg.m_ofn.lpstrTitle=_T("打开文件");	fileDlg.m_ofn.lpstrFilter=_T("Program(*.exe)\0*.exe\0All Files(*.*)\0*.*\0\0");//过滤exe后缀文件  	if(IDOK==fileDlg.DoModal())	{				LPWSTR pszExeName=fileDlg.m_ofn.lpstrFile;//获得进程完整路径		//CString pszExeName1=fileDlg.GetFileName();		//CString pszExeName =fileDlg.GetFolderPath();		SetDlgItemText(IDC_COMBO_CREATE_PROCESS,pszExeName);//把路径设置到编辑框中 IDC_COMBO_CREATE_PROCESS为组合控件ID				int codeIndex=CreateNewProcess(pszExeName);		//判断是否成功新建进程		CString strWrongPath;		strWrongPath.Format(_T("windows 找不到文件' %s ',请确定文件是否正确后,再试一次!"),pszExeName);		if(codeIndex==0)			{				AfxMessageBox(strWrongPath);			}	}	}
//----------------------------------------------------------
结束进程(因为 Win系统权限的问题,所以有的系统进程不能结束)
代码如下
void EndOfProcess(DWORD PID){      HANDLE hProcess;	BOOL isEnd;	//PID为进程ID		if(szBuf!=NULL)	{		hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);//获取进程句柄		if(hProcess==NULL)		{			DWORD dwError=GetLastError();			CString strError;			strError.Format(_T("获取句柄失败,Error Code is: %d"),dwError);			MessageBox(strError);		}		isEnd=TerminateProcess(hProcess,0);//判断进程是否成功结束		if(isEnd)		{			MessageBox(_T("进程结束"));		}else		{			MessageBox(_T("进程结束失败"));		}	CloseHandle(hProcess);}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/lovelyx/p/4867144.html

你可能感兴趣的文章
移动端开发单位——rem,动态使用
查看>>
系列文章目录
查看>>
手把手教你如何提高神经网络的性能
查看>>
前端布局原理涉及到的相关概念总结
查看>>
递归调用 VS 循环调用
查看>>
使用sstream读取字符串中的数字(c++)
查看>>
树莓派下实现ngrok自启动
查看>>
javascript静态类型检测工具—Flow
查看>>
MachineLearning-Sklearn——环境搭建
查看>>
node学习之路(二)—— Node.js 连接 MongoDB
查看>>
Goroutine是如何工作的?
查看>>
《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略
查看>>
TriggerMesh开源用于多云环境的Knative Event Sources
查看>>
GitLab联合DigitalOcean为开源社区提供GitLab CI免费托管
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
区块链现状:从谨慎和批判性思维看待它(第二部分)
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
GCM 3.0采用类似方式向Android、iOS和Chrome发送消息
查看>>
如何成为一家敏捷银行
查看>>
Oracle在JavaOne上宣布Java EE 8将会延期至2017年底
查看>>