其中以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. WTL 9.0的变化 - atlctrls.h

    atlctrls.h中是对控件的封装. 第1249行增加: void GetMargins(UINT& nLeft, UINT& nRight) const { ATLASSERT(: ...

  2. 循环递减算法 [a,b,c] 求 ab,ac,bc

    有数组 lineList=[a,b,c] 求所有不同的两两组合 ,结果:ab,ac,bc lineList.forEach((lineA,lineIndex)=>{ ==len){ return ...

  3. Io 异常: Invalid number format for port number

    报错信息: Caused by: java.sql.SQLException: Io 异常: Invalid number format for port number    at oracle.jd ...

  4. win +R

    一.电脑设置免登录密码及修改密码 1.win+R 2.输入control userpasswords2 3.勾选免密码账号登陆,修改密码 二.打开性能监视器 1.win+R 2.输入perfmon.e ...

  5. 洛谷 p1047 校门外的树 线段树做法

    非常easy, 注意一下它是两端开始,也就是说0的位置也有一棵树就好了 我由于太弱了,一道红题交了4,5遍 由于树的砍了就没了,lazy标记最大就是1; 直接贴代码吧 #include<bits ...

  6. 内置函数、反射、__str__、__del__、元类

    一.内置函数的补充 isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass obj=Foo() print(isinstance(obj,Foo) ...

  7. git手册查询

    1.创建版本库 通过git init命令把此目录变成Git可以管理的仓库; 添加文件到Git仓库,分两步 第一步:git add <file>,注意,可反复多次使用,添加多个文件:例如 g ...

  8. PyTorch学习之六个学习率调整策略

    PyTorch学习率调整策略通过torch.optim.lr_scheduler接口实现.PyTorch提供的学习率调整策略分为三大类,分别是 有序调整:等间隔调整(Step),按需调整学习率(Mul ...

  9. python jenkins api

    #!/usr/bin/pythonimport sys, timeimport shutil, commands#coding=utf-8 import sysreload(sys)sys.setde ...

  10. [Gamma阶段]事后分析博客

    目录 Gamma阶段事后分析博客 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 讨论照片 Gamma阶段事后分析博客 作业要求:Gamma阶段事后分析 设想和 ...