C++ 创建进程的方法

摘要:
必须初始化为NULLLPWSTRlpDesktop;//用于标识启动应用程序所在的桌面的名字。//如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。若是创建控制台窗口的应用程序,这些成员用于指明控制台窗口的左上角DWORDdwY;DWORDdwXSize;//用于设定应用程序窗口的宽度和长度只有dwYsize//当子进程将CW_USEDEFAULT用作CreateWindow的nWidth参数来创建它的第一个重叠窗口时,才使用这些值。

1. C++中创建进程的代码示例:

//ProcessDemo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<windows.h>#include <iostream>
using namespacestd;


intmain()
{
    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;

免责声明:文章转载自《C++ 创建进程的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RTU、DTU、工业网关三者有何区别windows之电脑开机出现 this product is covered by one or more of the following prtents下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建

  作者 关劲松           delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况。因此需要自行编写一个delay函数,以毫秒为单位控制等待时间。         函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapse...

Mybatis将日志信息打印到控制台

在mybatis.config.xml中增加如下配置 (mybatis的主配置文件):   <configuration>   <settings>      <setting name="logImpl" value="STDOUT_LOGGING" />   </settings></config...

WEBLOGIC启动后,重启后控制台进入缓慢、延迟,探查WEBLOGIC操作

本文说的是解决过程,可直接点击本行略过探查内容,跳到最后的解决办法!! 现象: 1、WEBLOGIC安装在 CENTOSopenSUSE 等LINUX或者UNIX机器上,无论是虚拟机或者PC或者服务器 2、创建简单domain,启动后,第一次进入控制台输入用户密码后出现管理界面,每次访问控制台速度均正常。 3、重启weblogicserver,访问控制台,...

SSDT笔记。(System Services Descriptor Table)

本人只是业余爱好,勿喷,有兴趣的看。懂的也就没必要看了。 希望能结交更多的朋友,不论技术如何,在下都愿意一起分享学习。 肯定有错的地方,希望大家指出,下面只是概念性东西。希望能给和我一样菜的朋友看下。看书上或者资料介绍的很繁琐感觉,我这算大白话吧。因为业余也没想系统学习,所以朋友给我科普了下,在这里谢谢下他。 说了这么多废话看笔记吧。 r0的inline...

idea中控制台的Problem窗口,代码的实时编译错误提醒功能开启

1.file—Settings—搜索compiler—将build project automatically点击之后应用该工程就会实时编译,提示错误 2.idea扫描dao层的时候报错,但是项目是正常运行的是因为项目可能是使用自动扫描的方法所以需要进行以下设置: file—Settings—搜索insperctions—spring—spring cor...

【转】Win7注册表的使用(更新中)

一、注册表的存储结构和数据类型 1、基本概念:   Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键。   键(Key):“位于左侧窗格如同文件夹图标一样的就是键”,类似于我的电脑中的文件夹。   键值(Value):“而在右侧窗格中一行行的选项,就称它为键值”,每个键值都有名称、类型、数据三项信...