1.WinExec(LPCSTR lpCmdLine,UINT uCmdShow)


>>参数:
lpCmdLine:指定程序的相对路径或绝对路径,命令行参数
uCmdShow:指定窗口的显示方式

>>窗口的显示方式:
SW_SHOW:显示窗口
SW_MAXIMIZE:最大化窗口
SW_MINIMIZE:最小化窗口
SW_NORMAL:正常显示窗口
SW_HIDE:隐藏窗口

>>例子
UINT result = WinExec("notepad",SW_SHOW); //打开记事本程序
if(result < 32){ printf("执行失败,错误代码%d",result); }


2.ShellExecute()、ShellExecuteEx()


>>ShellExecute函数原形:
HINSTANCE ShellExecute(HWND hwnd , LPCTSTR lpOperation , LPCTSTR lpFile , LPCTSTR lpParameters , LPCTSTR lpDirectory , INT nShowCmd );

>>参数:
hwnd:指定父窗口句柄
lpOperation:指定操作方式,"open","pr.int","explore"分别表示打开,打印,搜索,如果为NULL则默认是打开方式
lpFile:指定文件或程序名
lpParameters:传递的参数
lpDirectory:默认目录
nShowCmd:显示方式
函数返回值如果大于32则表示执行成功,否则失败

>>例子:
wchar_t* operation = L"open"; 

wchar_t* file = L"notepad"; 

wchar_t* para = L"C:\\a.txt"; 

wchar_t* dirc = L""; 

HINSTANCE result = ShellExecute(NULL , operation , file , para , dirc , SW_SHOW);

>>ShellExecuteEx函数原形:
BOOL WINAPI ShellExecuteEx( LPSHELLEXECUTEINFO lpExecInfo );

>>参数:
lpExecInfo:这个参数是SHELLEXECUTEINFO结构体的地址,SHELLEXECUTEINFO结构体定义了启动程序所需要的所有信息
结构体的定义:
typedef struct _SHELLEXECUTEINFO
{
    DWORD cdSize;                             //结构体大小
    ULONG fMask;                               //控制其他结构体哪些生效
    HWND hwnd;                                //所有者窗口句柄
    LPCTSTR lpVerb;                           //相当于ShellExecute函数的lpOperation参数
    LPCTSTR lpFile;                             //同ShellExecute函数的lpFile参数
    LPCTSTR lpParameters;                //同ShellExecute函数的lpParameters参数
    LPCTSTR lpDirectory;                   //同ShellExecute函数的lpDirectory参数
    int nShow;                                    //同ShellExecute的nShowCmd参数
    HINSTANCE hInstApp;                 //同ShellExcute函数的返回值
    LPVOID lpIDList;                          //存储成员的特别标识符
    LPCTSTR lpClass;                          //用以指明文件类别的名字或GUID
    HKEY hkeyClass;                           //获得已在系统注册的文件类型的Handle
    DWORD dwHotKey;                     //程序的热键关联
    union
    {
        HANDLE hIcon;                        //获得对应文件类型的图标的Handle
        HANDLE hMonitor;                 //将文档显示在显示器上的Handle
    } DUMMYUNIONNAME;
    HANDLE hProcess;                        //用于进行return操作的成员
}SHELLEXECUTEINFO , *LPSHELLEXECUTEINFO;

该函数返回值为布尔值,当返回true表示执行成功,返回false表示执行失败;

>>例子
SHELLEXECUTEINFO ShExecInfo = {0}; 

ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO ); 

ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; 

ShExecInfo.hwnd = NULL; 

ShExecInfo.lpVerb = L"open"; 

ShExecInfo.lpFile = L"notepad"; 

ShExecInfo.lpParameters = L" "; 

ShExecInfo.lpDirectory = NULL; 

ShExecInfo.nShow = SW_SHOW; 

ShExecInfo.hInstApp = NULL; 

BOOL bResult =ShellExecuteEx( &ShExecInfo ); 

if(!bResult) 



printf("执行失败!错误代码:%d",&ShExecInfo.hInstApp); 



WaitForSingleObject(ShExecInfo.hProcess,INFINITE);                    //等待新启动的记事本进程退出


3.CreateProcess()
使用CreateProcess()函数是最正规、最强大的进程创建方法

>>函数原形:
BOOL CreateProcess( LPCTSTR lpApplicationName , LPCTSTR lpCommandLine , LPSECURITY_ATTRIBUTES lpProcessAttributes , 
LPSECURITY_ATTRIBUTES lpThreadAttributes , BOOL bInheritHandles , DWORD dwCreationFlags , LPVOID lpEnvironment , 
LPCTSTR lpCurrentDirectory , LPSTARTUPINFO lpStartuoInfo , LPPROCESS_INFOMATION lpProcessInfomation );

>>参数:
lpApplicationName            / /可执行程序文件名
lpCommandLine                //要传递给可执行程序的参数
lpProcessAttributes            //进程安全性,默认为NULL
lpThreadAttributes             //线程安全性,默认为NULL
bInheritHandles                 //句柄是否可以被新进程继承
dwCreationFlags                 //新进程的优先级以及其他创建标志
lpEnvironment                     //新进程使用的环境变量
lpCurrentDirectory                //新进程使用的当前目录
lpStartuoInfo                       //指定新进程窗口位置,大小等信息
lpProcessInfomation            //传出参数,返回进程信息

>>例子:
STARTUPINFO si = {0}; 

si.cb = sizeof(si); 

si.dwFlags = STARTF_USESHOWWINDOW; 

si.wShowWindow = SW_SHOW; 

PROCESS_INFORMATION pi ; 

bool flag = CreateProcess(L"C:\\Windows\\notepad.exe" , NULL , NULL , NULL , FALSE , CREATE_NEW_CONSOLE , NULL , NULL , &si , &pi);

4.system()
system函数用于在C语言环境下执行各种控制台命令,也可以用它创建一个进程
>>函数原形:
int system( const char* command );
其中只有一个参数,就是要执行的控制台命令字符串,返回值是控制台执行后的返回值。使用它需要包含process.h头文件
>>例子:
int result = system("start notepad");




windows进程的创建方法的更多相关文章

  1. windows进程/线程创建过程 --- windows操作系统学习

    有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...

  2. Windows 进程的创建和终止

    创建一个进程 总述 如图,创建一个进程主要分为两部分,用户态部分和内核部分. 既然我们想看看一个进程是怎么被创建的,那我们就用 WinDbg 来看看从用户态到内核态都调用了什么: 第一步:我们先看看 ...

  3. windows 进程间通讯方法

    Windows平台为我们提供了多种进程间通信的机制,主要包括:注册表方式.共享文件方式.共享内存方式.共享数据段.映射文件方式.管道方式. 剪贴板方式.消息方式.其中注册表方式需要增加注册表表项,而注 ...

  4. 找出文件正在被哪个windows进程使用的方法

    Ever try to delete, move, or rename a file only to get a Windows system warning with something like ...

  5. Windows内核之进程基本含义以及进程的创建

    进程 1 进程的含义: 1.1   一个是操作系统用来管理进程的内核对象. 内核对象也是系统用来存放关于进程的统计信息的地方. 1.2   还有一个是地址空间,它包括全部可运行模块或DL L 模块的代 ...

  6. Windows提供了两种将DLL映像到进程地址空间的方法(隐式和显式)

    调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同.Windows提供了两种将DLL映像到进程地址空间的方法: 1. 隐式的加载 ...

  7. Windows提供了两种将DLL映像到进程地址空间的方法

    调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同.Windows提供了两种将DLL映像到进程地址空间的方法: 1. 隐式的加载 ...

  8. windows编程 进程的创建销毁和分析

    Windows程序设计:进程 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,在Windows编程环境下,主要由两大元素组成: • 一个是操作系统用来管理进程的内核对象.操作系统使用内 ...

  9. 并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性

    一 进程创建的两种方式 from multiprocessing import Process import time def task(name): print(f'{name} is runnin ...

随机推荐

  1. HTTP响应报文与工作原理详解

    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到 ...

  2. Linux数据流重定向

    一.什么是数据流重导向: 数据流重导向 (redirect) 由字面上的意思来看,好像就是将『数据传导到其他地方去』,没错-数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给他传输到其他的 ...

  3. POJ 1287 Networking (最小生成树)

    Networking 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/B Description You are assigned ...

  4. poj 1847 Tram

    http://poj.org/problem?id=1847 这道题题意不太容易理解,n个车站,起点a,终点b:问从起点到终点需要转换开关的最少次数 开始的那个点不需要转换开关 数据: 3 2 1// ...

  5. 转载.net泛型理解说明

    net泛型理解 泛型简介: 泛型(Generic Type)是.NET Framework2.0最强大的功能之一.泛型的主要思想是将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从 ...

  6. UVaLive 7269 Snake Carpet (找规律,模拟)

    题意:给定一个数字n,表示有n条蛇,然后蛇的长度是 i ,如果 i 是奇数,那么它只能拐奇数个弯,如果是偶数只能拐偶数个,1, 2除外,然后把这 n 条蛇, 放到一个w*h的矩阵里,要求正好放满,让你 ...

  7. Unity3D之Mecanim动画系统学习笔记(四):Animation State

    动画的设置 我们先看看Animation Clip的一些设置: Loop time:动画是否循环播放. 下面出现了3个大致一样的选项: Root Transform Rotation:表示为播放动画的 ...

  8. UVA1395

    // UVa1395 Slim Span // Rujia Liu #include<cstdio> #include<cmath> #include<cstring&g ...

  9. ios开发——仿新版iBooks书本打开与关闭动画

    IOS新版iBooks吸引人的地方除了有干净整洁的界面.方便灵活的操作以及大容量的书籍容量以外.还有其优秀的用户交互,尤其是其动画的使用.打开一本书时书本缓慢放大并打开.关闭一本书后书本关闭并回到原位 ...

  10. myeclipse 10创建maven项目

    创建maven项目,这里使用的不是myeclipse自带的maven插件.而是自己 又一次安装的插件,就不啰嗦了,直接上图吧 1.先是安装maven插件.将maven插件解压把它放进E:\xuan\M ...