其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。

WinExec 有两个参数,前一个指定路径,后一个指定显示方式。

ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。

CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进

程的细节属性,若要达到这些目的,就需要使用CreateProcess函数了。

具体用法如下。

WinExec

这个函数最简单,只有两个参数,原型如下:

UINT WinExec(

LPCSTR lpCmdLine,    // 命令路径

UINT uCmdShow       // 显示方式,共有11种,具体可以查阅MSDN的ShowWindow函数

);

使用方法如下:

WinExec("Notepad.exe",
SW_SHOW); // 打开记事本

WinExec("D:\\Program
Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打开Test.exe(注意文件名的大小写也必须完全一样)

需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Calc (计算器),就不会出现正常的窗体,但是已经被加到任务列表里了。

ShellExecute

原型如下:

HINSTANCE ShellExecute(

HWND
hwnd,            //父窗口句柄

LPCTSTR lpOperation,    //操作, 打开方式"edit","explore","open","find","print","NULL"

LPCTSTR lpFile,         //文件名,前面可加路径

LPCTSTR lpParameters,   //参数

LPCTSTR lpDirectory,     //默认文件夹

INT nShowCmd          
//显示方式

);

使用方法如下:

ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
// 打开C:\Test.txt 文件

ShellExecute(NULL,
"open", "http://www.google.com", NULL, NULL,
SW_SHOWNORMAL); // 打开网页www.google.com

ShellExecute(NULL,"explore",
"D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打开目录D:\C++

ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL,
SW_HIDE); // 打印文件C:\Test.txt

注意:ShellExecute不支持定向输出。

CreateProcess

原型如下:

BOOL CreateProcess(

LPCTSTR lpApplicationName, //执行程序名

LPTSTR lpCommandLine, // 参数行

//下面两个参数描述了所创建的进程和线程的安全属性,如果为NULL则使用默认的安全属性

LPSECURITY_ATTRIBUTES lpProcessAttributes, //process security attributes

LPSECURITY_ATTRIBUTES lpThreadAttributes,    // thread
security attributes

BOOL bInheritHandles, // 继承标志

DWORD dwCreationFlags, // 创建标志

LPVOID lpEnvironment, // 环境变量

LPCTSTR lpCurrentDirectory,   // 运行该进程的初始目录

LPSTARTUPINFO lpStartupInfo, // 用于在创建子进程时设置各种属性

LPPROCESS_INFORMATION lpProcessInformation //用于在进程创建后接受相关信息

);

使用方法如下:

PROCESS_INFORMATION pi; //启动窗口的信息

STARTUPINFO si; //进程的信息

memset(&si,0,sizeof(si));

si.cb=sizeof(si);

si.wShowWindow=SW_SHOW;

si.dwFlags=STARTF_USESHOWWINDOW;

bool
fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);

由此,我就设计了三个按钮,分别用这三种函数调用了三个应用程序,设置在每个按钮的ONCLICK消息中:

WinExec("taskmgr",SW_NORMAL); //调用系统任务管理器

ShellExecute(NULL,"open","C:\ReadMe.txt","","",SW_SHOW);
//打开C盘下的ReadMe文件

STARTUPINFO si={sizeof(si)};

PROCESS_INFORMATION pi;

CreateProcess(NULL,"cleanmgr",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
//调用系统的清理磁盘程序

WinExec, ShellExecute,CreateProcess 区别的更多相关文章

  1. ShellExecute, WinExec, CreateProcess区别

    ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 有几个API函数都可以实现这些功能 ...

  2. ShellExecute, WinExec与CreateProcess

    0x01  ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制.  函数原型: Shel ...

  3. [转]WinExec、ShellExecute和CreateProcess及返回值判断方式

    [转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...

  4. Delphi调用外部程序函数:WinExec() 和ShellExecute详解

    1,WinExec():   WinExec主要运行EXE文件,不能运行其他类型的文件.不用引用特别单元.   原型:UINT WinExec(exePath,ShowCmd)   示例,我想要用记事 ...

  5. WinExec打开exe文件

    1,WinExec():   WinExec主要运行EXE文件,不能运行其他类型的文件.不用引用特别单元.   原型:UINT WinExec(exePath,ShowCmd)   示例,我想要用记事 ...

  6. 以不同用户身份运行程序,/savecred只需要输入一次密码(GetTokenByName取得EXPLORER.EXE的令牌,然后调用CreateProcessAsUser,而且使用LoadUserProfile解决另存文件的问题)good

    http://blog.sina.com.cn/s/blog_65977dde0100s7tm.html ----------------------------------------------- ...

  7. [转]MFC 加载其他的应用程序

    三个SDK函数 winexec, shellexecute,createprocess可以使用.WinExec 最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如泥用 S ...

  8. VC常用小知识

    (1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现.AfxGetMainWnd() ->Sho ...

  9. C++运行外部exe并判断exe返回值

    有三个API函数可以运行可执行文件WinExec.ShellExecute和CreateProcess.CreateProcess因为使用复杂,比较少用. WinExec主要运行EXE文件. ⑴ 函数 ...

随机推荐

  1. AQS 抽象队列同步器(Abstract Queued Synchronizer) 知识点

    AQS的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态. AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = ...

  2. Nginx——端口负载均衡

    前言 Nginx做的代理后面SpringBoot的项目,1N3T的架构,Tomcat的配置也进行了相应的调优. 配置 这里主要来简单的说下Nginx的端口负载均衡,具体的大家可以参考 Nginx文档 ...

  3. 06-numpy-笔记-shape

    shape 是返回 np.mat 的形状的. 1. 作为 mat 的成员变量,a.shape 2. 作为 np 的成员函数,np.shape >>> import numpy as ...

  4. LA2955 Vivian难题——梅森素数

    题意 输入 $k$(1 \leq k \leq 100)个正整数 $p_1, p_2, ..., p_k$(1 < p_i < 2{31}),找出 $k$ 个非负整数 $e_i$ 使得 $ ...

  5. 【oracle】update 某字段为null

    字段 = null 注意这个字段要可以为空

  6. A9G开发

    巨坑 不支持联通 发短信 上电,准备好后使用 结束标志 取消换行  以16进制发  0x1a 实际测试 中间可以有很多行内容 短信内容结束换行 最后必须以 16进制 发送 0x1a  带和不带换行都可 ...

  7. CF598: div3解题报告

    CF598:div3解题报告 A: Payment Without Change 思路: 按题意模拟即可. 代码: #include<bits/stdc++.h> using namesp ...

  8. Layui 在新标签中打开页面 / 模拟点击菜单

    原文:https://blog.csdn.net/sr_www/article/details/81394365 核心代码: //在新标签页中 打开页面 function newTab(url, ti ...

  9. BST | 1064 完全二叉搜索树

    OJ:https://www.patest.cn/contests/pat-a-practise/1064 (一)23分(3个case未过)代码 建树的规律是我瞎猜的.首先用样例数据分析. 对数据排序 ...

  10. Glimma 包

    http://master.bioconductor.org/packages/3.9/bioc/html/Glimma.html 安装 if (!requireNamespace("Bio ...