//----------------------------------------------------新建进程任务
//点击 "新建任务"按钮 代码如下:
//打开新建任务对话框
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)\0*.exe\0All Files(*.*)\0*.*\0\0");<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);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。