WIN32创建进程CreateProcess

BOOL CreateProcess(

LPCTSTR 【lpApplicationName】,    //指向可执行模块名称的指针
LPTSTR 【lpCommandLine】,    //指向命令行字符串的指针
LPSECURITY_ATTRIBUTES 【lpProcessAttributes】,    //指向进程安全属性的指针 可以设置子进程是否可以被别的进程继承
LPSECURITY_ATTRIBUTES 【lpThreadAttributes】,    //指向线程安全属性的指针  可以设置子进程的线程是否可以被别的进程继承
BOOL 【bInheritHandles】,    //处理继承标志 设置TRUE可以继承之前创建的允许被继承的内核对象(SECURITY_ATTRIBUTES的bInheritHandle)
DWORD 【dwCreationFlags】,    //创建标志
LPVOID 【// pointer to new environment block】,    //指向新的环境块
LPCTSTR 【lpCurrentDirectory】,    //指向当前目录名称的指针 如果NULL 则获取的是父进程目录 填的话就获取填的值
LPSTARTUPINFO 【lpStartupInfo】,    //指向STARTUPINFO的指针 窗口信息 结构体第一个成员 DWORD cb必须赋值
LPPROCESS_INFORMATION 【lpProcessInformation】    //指向PROCESS_INFORMATION的指针 进程线程句柄信息
);

 

typedef struct _STARTUPINFO
{
    DWORD cb;            //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.应用程序必须将cb初始化为sizeof ( STARTUPINFO )
    PSTR lpReserved;      //保留。必须初始化为N U L L
    PSTR lpDesktop;    //用于标识启动应用程序所在的桌面的名字。如果该桌面存在,新进程便与指定的桌面相关联。如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。    如果lpDesktop是NULL(这是最常见的情况 ),那么该进程将与当前桌面相关联
    PSTR lpTitle;    //用于设定控制台窗口的名称。如果l p Ti t l e 是N U L L ,则可执行文件的名字将用作窗口名
    DWORD dwX;       //用于设定应用程序窗口在屏幕上应该放置的位置的x 和y 坐标(以像素为单位)。
    DWORD dwY;       //只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠窗口时,    才使用这两个坐标。若是创建控制台窗口的应用程序,这些成员用于指明控制台窗口的左上角

    DWORD dwXSize;  //用于设定应用程序窗口的宽度和长度(以像素为单位)只有dwYsize
    DWORD dwYSize;  // 当子进程将CW_USEDEFAULT 用作CreateWindow 的nWidth参数来创建它的第一个重叠窗口时,才使用这些值。若是创建控制台窗口的应用程序,这些成员将用于指明控制台窗口的宽度
    DWORD dwXCountChars;  //用于设定子应用程序的控制台窗口的宽度和高度(以字符为单位)
    DWORD dwYCountChars;
    DWORD dwFillAttribute;   //用于设定子应用程序的控制台窗口使用的文本和背景颜色
    DWORD dwFlags;           //请参见下一段和表4 - 7 的说明
    WORD wShowWindow;        //用于设定如果子应用程序初次调用的ShowWindow 将SW_SHOWDEFAULT 作为    nCmdShow 参数传递时,该应用程序的第一个重叠窗口应该如何出现。本成员可以是通常用于ShowWindow 函数的任何一个SW_*标识符
    WORD cbReserved2;        //保留。必须被初始化为0
    PBYTE lpReserved2;       //保留。必须被初始化为N U L L
    HANDLE hStdInput;        //用于设定供控制台输入和输出用的缓存的句柄。按照默认设置,hStdInput 用于标识键盘缓存,hStdOutput 和hStdError用于标识控制台窗口的缓存
    HANDLE hStdOutput;
    HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
// Process0617.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

void Getsi()
{
    STARTUPINFO si;
  //获取启动参数相关信息 GetStartupInfo(
&si); printf("%x %x %x %x %x %x %x %x ",si.dwX,si.dwY,si.dwXCountChars,si.dwYCountChars,si.dwFillAttribute,si.dwXSize,si.dwYSize,si.dwFlags); } BOOL CreateProcessFun(PTCHAR szAppName,PTCHAR szCmdLine) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); ZeroMemory(&pi,sizeof(pi)); //si->cb = sizeof(si); si.cb = sizeof(si); if (!CreateProcess(szAppName,szCmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) { printf("创建进程失败\n"); return FALSE; } else { printf("创建进程成功,进程句柄:%d--进程ID:%d--线程句柄:%d--线程ID:%d\n",pi.hProcess,pi.dwProcessId,pi.hThread,pi.dwThreadId); return TRUE; } return TRUE; } int main(int argc, char* argv[]) { TCHAR stcAppName[] = TEXT("C://Program Files//Internet Explorer//iexplore.exe"); TCHAR stcCmdLine[] = TEXT(" https://www.qq.com/"); CreateProcessFun(stcAppName,stcCmdLine); getchar(); return 0; }

 

原文地址:https://www.cnblogs.com/ganxiang/p/13154021.html