C++ 创建进程的方法
1. C++中创建进程的代码示例:
// ProcessDemo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include<windows.h> #include <iostream> using namespace std; int main() { STARTUPINFO startupInfo = { 0 }; PROCESS_INFORMATION processInformation = { 0 }; /*打开Word应用程序 C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE 为程序路径*/ BOOL bSuccess = CreateProcess(TEXT("C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE"), NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &startupInfo, &processInformation); if (bSuccess) { cout << "Process started..." << endl << "ProcessID: " << processInformation.dwProcessId << endl; } else { cout << "Can not start process!" << endl << "Error code: " << GetLastError(); } system("pause"); }
2. 参数说明(_STARTUPINFOW 结构体参数),参考链接:http://www.360doc.com/content/14/0514/22/7591436_377668778.shtml
typedef struct _STARTUPINFOW { DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.应用程序必须将cb初始化为sizeof(STARTUPINFO) LPWSTR lpReserved; //保留。必须初始化为NULL LPWSTR lpDesktop; //用于标识启动应用程序所在的桌面的名字。如果该桌面存在,新进程便与指定的桌面相关联。 //如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。 //如果lpDesktop是NULL(这是最常见的情况), 那么该进程将与当前桌面相关联 LPWSTR lpTitle; //用于设定控制台窗口的名称。如果lpTitle 是NULL,则可执行文件的名字将用作窗口名 DWORD dwX; // 用于设定应用程序窗口在屏幕上应该放置的位置的x 和y 坐标(以像素为单位) // 只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠窗口时, // 才使用这两个坐标。若是创建控制台窗口的应用程序,这些成员用于指明控制台窗口的左上角 DWORD dwY; DWORD dwXSize; //用于设定应用程序窗口的宽度和长度(以像素为单位)只有dwYsize // 当子进程将CW_USEDEFAULT用作 CreateWindow 的 nWidth 参数来创建它的第一个重叠窗口时,才使用这些值。 // 若是创建控制台窗口的应用程序,这些成员将用于指明控制台窗口的宽度 DWORD dwYSize; DWORD dwXCountChars; //用于设定子应用程序的控制台窗口的宽度和高度(以字符为单位) DWORD dwYCountChars; DWORD dwFillAttribute; //用于设定子应用程序的控制台窗口使用的文本和背景颜色 DWORD dwFlags; WORD wShowWindow; //用于设定如果子应用程序初次调用的ShowWindow 将SW_SHOWDEFAULT 作为 // nCmdShow 参数传递时,该应用程序的第一个重叠窗口应该如何出现。 // 本成员可以是通常用于 ShowWindow 函数的任何一个 SW_* 标识符 WORD cbReserved2; //保留。必须被初始化为0 LPBYTE lpReserved2; //保留。必须被初始化为NULL HANDLE hStdInput; //用于设定供控制台输入和输出用的缓存的句柄。按照默认设置,hStdInput 用于标识键盘缓存,hStdOutput 和 hStdError 用于标识控制台窗口的缓存 HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO;
dwFlags 使用标志及含义:
标志 | 含义 |
STARTF_USESIZE | 使用dwXSize 和dwYSize 成员 |
STARTF_USESHOWWINDOW | 使用wShowWindow 成员 |
STARTF_USEPOSITION | 使用dwX 和dwY 成员 |
STARTF_USECOUNTCHARS | 使用dwXCountChars 和dwYCount Chars 成员 |
STARTF_USEFILLATTRIBUTE | 使用dwFillAttribute 成员 |
STARTF_USESTDHANDLES | 使用hStdInput 、hStdOutput 和hStdError 成员 |
STARTF_RUN_FULLSCREEN | 强制在x86 计算机上运行的控制台应用程序以全屏幕方式启动运行 |
3. 参数说明(_PROCESS_INFORMATION 结构体)参考链接:https://blog.csdn.net/akof1314/article/details/5471768
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; //存放每个对象的与进程相关的句柄 HANDLE hThread; //返回的线程句柄。 DWORD dwProcessId; //用来存放进程ID号 DWORD dwThreadId; //用来存放线程ID号 } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;