创建可执行进程(windows)在win10下的表现
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建可执行进程(windows)在win10下的表现相关的知识,希望对你有一定的参考价值。
CreateProcess
CreateProcess 函数在windows 10 下已经能够自动接收创建进程的输出,不用在像以前那样去创建管道去接收,而且这个函数容易出错了。
child
创建子进程
#include <iostream>
int main()
std::cout << "Hello World!\\n";
getchar();
如代码所示,等待按键结束
father
int main()
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if(!CreateProcessA(NULL, (LPSTR)"child1.exe", NULL, NULL, TRUE, 0, NULL, NULL,&si,&pi))
// Start the child process.
printf("CreateProcess failed (%d).\\n", GetLastError());
return -1;
ListenSingleProcessFinish(pi.hProcess);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
创建子进程后,子进程输出到了父窗口里面,并没有管道约束。
父进程直接输出了hello world ,并且等待按键结束。
以下再提供一些有用的函数
#include<iostream>
#include<Windows.h>
#include<tchar.h>
#include <tlhelp32.h>//声明快照函数的头文件
bool IsProcessRun(const WCHAR * pName)
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
bool bFind = false;
// 获取系统中所有进程的快照。
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return false;
// 在使用结构之前设置结构的大小。
pe32.dwSize = sizeof(PROCESSENTRY32);
// 获取第一个进程的信息
// 如果不成功则退出
if (!Process32First(hProcessSnap, &pe32))
CloseHandle(hProcessSnap); // clean the snapshot object
return false;
//现在遍历进程的快照,并且依次显示每个进程的信息
do
// Retrieve the priority class.
dwPriorityClass = 0;
if (::wcsstr(pe32.szExeFile, pName) != NULL)
bFind = true;
break;
while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return bFind;
#include "stdafx.h"
using namespace std;
enum PROCESS_RESULT
PROCESS_NORMAL_END, //正常退出
PROCESS_ABNORMAL_END, //异常退出
PROCESS_UNKNOWN_END, //未知错误
;
//监听某个进程是否结束
PROCESS_RESULT ListenSingleProcessFinish(HANDLE hHandle)
std::cout << "开始监听" << std::endl;
DWORD wait_result =::WaitForSingleObject(hHandle,INFINITE);
if (wait_result == WAIT_OBJECT_0 + 1)
cout << "正常退出" << endl;
return PROCESS_NORMAL_END;
else if (wait_result == WAIT_OBJECT_0)
cout << "异常退出" << endl;
return PROCESS_ABNORMAL_END;
else
return PROCESS_UNKNOWN_END;
int _tmain(int argc, _TCHAR* argv[])
HANDLE hhanld = OpenProcess(PROCESS_ALL_ACCESS,NULL,15232); //获取进程句柄
if (hhanld !=NULL)
ListenSingleProcessFinish(hhanld);
system("pause");
return 0;
以上是关于创建可执行进程(windows)在win10下的表现的主要内容,如果未能解决你的问题,请参考以下文章