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;

 

原文链接: https://www.cnblogs.com/runningRain/p/12939605.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ 创建进程的方法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/350075

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午6:04
下一篇 2023年3月2日 上午6:05

相关推荐