zoukankan      html  css  js  c++  java
  • C++ 新建进程和结束进程

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

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

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

    将打开如下图的对话框


    //<strong>确定 按钮  新建任务</strong>
    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);
    	}
    }
    
    
    //<strong>新建任务</strong>
    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, 
    			<span style="white-space:pre">	</span>&saProcess,&saThread, 
    				false,
    				CREATE_DEFAULT_ERROR_MODE,NULL,NULL,
    				&siStartupInfo,
    				&piProcInfoGPS 
    				);  
    
    	return isSuccess;
    }
    //<strong>浏览 打开对话框获得进程路径</strong>
    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)*.exeAll Files(*.*)*.*");<span class="comment" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 130, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">//过滤exe后缀文件</span><span style="margin: 0px; padding: 0px; border: none; font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">  </span>
    
    	if(IDOK==fileDlg.DoModal())
    	{		
    		LPWSTR pszExeName=fileDlg.m_ofn.lpstrFile;//获得进程完整路径
    		//CString pszExeName1=fileDlg.GetFileName();
    		//CString pszExeName =fileDlg.GetFolderPath();
    
    		SetDlgItemText(IDC_COMBO_CREATE_PROCESS,pszExeName);//把路径设置到编辑框中 <span style="font-family: Arial, Helvetica, sans-serif;">IDC_COMBO_CREATE_PROCESS为组合控件ID</span>
    
    		
    		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);
    }



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

  • 相关阅读:
    python:xlrd模块
    psql:转:会引起全表扫描的10种sql语句
    Linux相关
    面试题
    Siege Web服务器性能压力测试工具
    Nginx+uWSGI+Supervisor配置
    SQLAlchemy
    Virtualenv创建虚拟环境
    算法
    Mac常用快捷键
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867144.html
Copyright © 2011-2022 走看看