【Win32 API学习]打开可执行文件

在MFC中打开其他可执行文件常用到的方法有:WinExec、ShellExecute、CreatProcess。

1.WinExec

WinExec 主要运行EXE文件,用法简单,只有两个参数,前一个指定命令路径,后一个指定窗口显示方式:

    UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow)

示例:WinExec("E:\\Program Files\\AppStore\\appstore.exe", SW_SHOW);

2.ShellExecute

ShellExecute比WinExec灵活一些,可以指定工作目录。不仅可以运行EXE文件,还可以运行已经关联的文件。

  HINSTANCE ShellExecute(
      __in_opt  HWND hwnd,                    //父窗口句柄
      __in_opt  LPCTSTR lpOperation,        //操作方式
      __in      LPCTSTR lpFile,                   // 文件名称
      __in_opt  LPCTSTR lpParameters,     //参数
      __in_opt  LPCTSTR lpDirectory,        //默认工作路径,必须为绝对路径
      __in      INT nShowCmd                   //显示方式
    );
示例:

  ShellExecute(NULL,"open","appstore.exe",NULL,"E:\\Program Files\\Appstore",SW_SHOW);

之前曾碰到一个问题,对于同一个可执行文件用第一种WinExec方法打开文件里面内容无法显示,而用后面这种ShellExecute方法则能正确显示,原因是后面一种方法指定了程序当前工作路径

3.CreateProcess

  CreateProcess是最复杂的方法,一共有十个参数,不过大部分都可以用NULL来答题,他可以指定进程的安全属性,继承属性,累的优先级等等,如果我们要得到足够多的关于新的进程信息,控制新的进程细节属性,就需要使用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 //用于在进程创建后接受相关信息
 );

示例:CreateProcess(NULL,"E:\\liucheng.exe",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);

ps:
 1.C++中所表示的路径要用 " \\ "而不是平常所用的" \ ",所以以上三个函数表示路径都为:Disk:\\Directory\\...\\File name

2.ShowCmd 显示方式:

  SW_HIDE 隐藏窗口,活动状态给令一个窗口
  SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
  SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
  SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
  SW_SHOWMAXIMIZED 最大化窗口,并将其激活
  SW_SHOWMINIMIZED 最小化窗口,并将其激活
  SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
  SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
  SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
  SW_SHOWNORMAL 与SW_RESTORE相同

   

转载于:https://www.cnblogs.com/Vicky-Lee/archive/2011/09/26/2182701.html

猜你喜欢

转载自blog.csdn.net/weixin_34137799/article/details/93423773