随笔 - 809  文章 - 0 评论 - 144 阅读 - 770万

在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相同

posted on   del88  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示