zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    分布式事务--AT+TCC
    Java基础面试题
    JVM问题
    集合问题
    线程问题
    微服务面试题
    【入职准备】安装STS以及整合maven
    事务----四大特性
    html小知识--创建表单
    通过css润色html表格
  • 原文地址:https://www.cnblogs.com/runningRain/p/12939605.html
Copyright © 2011-2022 走看看