今天测试对单个进程的创建到等待结束。
// CreateProTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <cstring>
#include <stdio.h>
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwExitCode = 0; //定义接受退出代码的地址变量
UINT inExitCode = 0;
TCHAR szCommandLine[] = _T("notepad"); //赋值要创建的进程名称可以是完整路径或者只有进程名
PROCESS_INFORMATION pi; //定义结构体
STARTUPINFO si = {sizeof(si)}; //初始化结构体
memset(&si, 0x00, sizeof(si)); //结构体清零
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.dwFlags = NULL /*STARTF_USESHOWWINDOW*/; //如果是NULL则表示创建的进程显示窗体,另一个参数表示不显示窗口
si.wShowWindow = SW_HIDE;
BOOL retValue = CreateProcess(
NULL, //可执行文件的名称(含或不含路径)。如果该参数为NULL,那必须在参数lpCommandLine中传递文件名称。
szCommandLine, //要创建的命令行参数。需要通过参数来传递
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si, //结构体
&pi //结构体
);
if(!retValue) //判断返回值,若果是false则表示创建进程失败,通过GetlastError得到错误代码,返回是true表示创建进程成功
{
int Reetu = GetLastError();
}
CloseHandle(pi.hThread); //关闭主线程
GetExitCodeProcess(pi.hProcess, &dwExitCode);
//TerminateProcess(pi.hProcess, inExitCode); //终止指定进程及其所有线程
WaitForSingleObject(pi.hProcess,/*INFINITE*/3000); //等待创建的进程句柄退出,参数INFINITE表示一直等待创建的进程正常退出
GetExitCodeProcess(pi.hProcess, &dwExitCode); //得到进程的退出代码,如果是STILL_ACTIVE(259)则表示进程还没有退出,如果退出代码是0则表示进程已经退出
if(STILL_ACTIVE == dwExitCode)
{
return 0;
}
CloseHandle(pi.hProcess); //关闭进程句柄,内核对象数目减1
return 0;
}