C++程序中调用exe文件的一种方法

        我们在开发项目时,通常需要通过一个程序调用另一个程序,在这里介绍一中在C++程序中调用exe文件的方法:使用ShellExcecuteEx函数。

      使用ShellExcecuteEx相对于其他的调用exe的方法,例如:使用system函数,使用exec或者是execv函数,使用WinExec函数,使用CreateProcess函数。前者在前台打开程序、控制权限等发面都有优势,这里首先介绍函数原型,函数原型如下:

      BOOL ShellExecuteEx(SHELLEXECUTEINFO pExecInfo),这里有必要对SHELLEXECUTEINFO 数据类型进行一下解释。SHELLEXECUTEINFO 定义如下:

typedef struct _SHELLEXECUTEINFO
{
      DWORD cbSize;//通常取值sizeof(SHELLEXECUTEINFO)
      ULONG fMask;//常见取值SEE_MASK_NOCLOSEPROCESS
      HWND hwnd;//一般为NULL
      PCTSTR lpVerb;//打开程序为_T("open")
      PCTSTR lpFile;//你要打开的EXE文件的路径。
      PCTSTR lpParameters;//可以为空
      PCTSTR lpDirectory;//一般取NULL
      int nShow;//这个取值较多,有SW_MAXIMIZE,SW_HIDE,SW_NORMAL等等,其用开控制窗口是否显示及大小
      HINSTANCE hInstApp;//一般为NULL,下面的不用赋值也行。
      PVOID lpIDList;
      PCTSTR lpClass;
      HKEY hkeyClass;
      DWORD dwHotKey;
      union
      {
            HANDLE hIcon;
            HANDLE hMonitor;
       } DUMMYUNIONNAME;

       HANDLE hProcess;
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

下面贴出我的代码,在MFC程序中使用:

CString path = "C:\\Text\\text.exe";
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; 
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("open");
ShExecInfo.lpFile = _T(path);
ShExecInfo.lpParameters = _T(" "); //-a a
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE SW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);

你可能感兴趣的:(C++,struct,null,mfc,exe,Path)