1、如何在 vc程序中调用 exe文件ShellExecute(this-m_hWnd,“open“,“notepad.exe“,“c:scandisk.log“,“,SW_SHOW ); 用创建独立子进程的方法。也可以不独立,下面的代码创建的子进程是独立的。BOOL ret;PROCESS_INFORMATION pi;STARTUPINFO si;si.cb = sizeof(si);si.wShowWindow = SW_SHOWNORMAL;ret = CreateProcess(_T(“c:xx.exe“),NULL,NULL,FALSE,0,NORMAL_PRIORITY_CLASS,
2、NULL,NULL,if (ret)CloseHandle(pi.hThread);CloseHandle(pi.hProcess); 学习如何在程序中调用.exe 文件 Posted on 2004-07-09 08:06 wngwz 阅读(587) 评论 (1) 编辑 收藏 网摘 所属分类: .NET 学习 System.Diagnostics.Process proc = new System.Diagnostics.Process();/程序名称proc.StartInfo.FileName = “mt3000.exe“; /参数proc.StartInfo.Arguments = “
3、/p1 /b38400 /fstock /mr“; /隐藏proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;/执行proc.Start(); WinExec(“calc.exe“,SW_SHOW);/调用计算器 ShellExec(NULL,“open“,“calc.exe“,NULL,NULL,SW_SHOW);/同上 CreateProcess./参数比较烦,懒得写关于在一个程序中调用另一个程序的 exe文件 2008-08-04 11:14 这两天在做音频识别的程序中,想将一个音频识别的程序
4、加进我的大程序中。但是在加音频程序进来的时候,有很多的问题,无法加进去。迫于无奈,只得在大程序的音频识别一块调用音频识别的小程序的 exe文件,效果也不错。我觉得以后也可以借鉴。以下是调别的程序的 exe文件的小代码:SHELLEXECUTEINFO ShExecInfo = 0;ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = NULL;ShExecInfo.lpFile = “E:
5、SimpleDictDebugsimpledict.exe“;/别的程序的 exe文件Info.lpParameters = “;ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(WaitForSingleObject(ShExecInfo.hProcess,INFINITE);/执行完别的程序的 exe文件后,返回主程序。C+程序中调用 exe可执行文件 2007年 10月 15日 星期一 18:48当项目比较大的时候,通常会分开来开发,如果分开
6、的部分只是一些函数或类,整合的时候 就可以使用静态库或动态库。但如果分开的是一个 exe文件,整合的时候,就要通过调用 exe文件来使用。尤其是当第三方软件是一个用 c语言编写的 exe文件时,更是需要如此。最近在我所开发的 LCDS系统当中就碰到了这样的问题。他需要调用一个分类器来处理数据,而手头上的分类器是经典的 C4.5决策树分类器,它是用 c语言写的,没有.h 头文件,生成的是一个 exe文件,通过在命令行执行 main函数来处理数据。如果想把其改成静态库或动态库,因为没有头文件,改写后似乎不好调用其函数,因此考虑直接调用其生成的 exe文件。可考虑的方法有:1.使用 system函数
7、 2.使用 execl或 execv函数 3.使用 WinExec函数 4.使用 CreateProcess函数 5.使用 ShellExecuteEx函数system函数和 execl、execv 函数不能控制程序窗口是否显示,我要的效果是不显示该 exe程序的窗口,所以这两种方法不予考虑。WinExec 函数不好控制主程序来等该 exe程序的结束,所以放弃。CreateProcess 函数是新建一个进程,所以,你必须人为地控制该进程的生死,不如 ShellExecuteEx方便,所以最终我选择的是 ShellExecuteEx函数。程序如下:SHELLEXECUTEINFO ShExecI
8、nfo = 0; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = _T(“open“); ShExecInfo.lpFile = _T(“c4.5.exe“); ShExecInfo.lpParameters = _T(“-f train“); ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE; ShExecIn
9、fo.hInstApp = NULL; ShellExecuteEx( WaitCursorBegin();WaitForSingleObject(ShExecInfo.hProcess,INFINITE);WaitCursorEnd();比如 c:notpad.exe 可以这么写(比如按钮按下) winexec(c:notpad.exe,1); 这样就行了回答人:软界网友 我来回答回答(3)ShellExecute()也行回答人:软界网友 我来回答回答(4)winexec(C:WINNTsystem32notepad.exe,0) 参数 1:.exe 文件全路径名 参数 2: 控制参数关于在
10、 VC中调用其它 EXE关键词: VC 调用 exe 三个 SDK函数: WinExec,ShellExecute ,CreateProcess 可以实现调用其他程序的要求,其中以 WinExec最为简单,ShellExecute 比 WinExec灵活一些,CreateProcess 最为复杂。WinExec 两个参数,前一个指定路径,后一个指定显示方式。ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute 还可以打开网页,启动相应的邮件关联发送邮件等等。CreateProcess 一共有十个参数,不过大部分都可以
11、用 NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用 CreateProcess函数了。三个 SDK函数( WinExec、ShellExec、CrateProcess )的语法:WinExec这个函数最简单,只有两个参数,原型如下:UINT WinExec(LPCSTR lpCmdLine, / 命令路径UINT uCmdShow / 显示方式;使用方法如下:WinExec(“Notepad.exe“, SW_SHOW); / 打开记事本WinExec(“D:Program F
12、ilesTestTest.exe“,SW_SHOWMAXIMIZED); / 以最大化的方式打开 Test.exe需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Neterm,Calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。ShellExecute原型如下:HINSTANCE ShellExecute(HWND hwnd, /父窗口句柄LPCTSTR lpOperation, /操作, 打开方式 “edit“,“explore“,“open“,“find“,“print“,“NULL“LPCTSTR lpFile, /文件名,前面可加
13、路径LPCTSTR lpParameters, /参数LPCTSTR lpDirectory, /默认文件夹INT nShowCmd /显示方式);使用方法如下:ShellExecute(NULL,“open“,“C:Test.txt“,NULL,NULL,SW_SHOWNORMAL); / 打开C:Test.txt 文件ShellExecute(NULL, “open“, “iexplore.exe“,“http:/“,/ NULL, NULL, SW_SHOWNORMAL); / 打开网页 ShellExecute(NULL,“explore“, “D:C+“,NULL,NULL,SW_S
14、HOWNORMAL); / 打开目录D:C+ShellExecute(NULL,“print“,“C:Test.txt“,NULL,NULL, SW_HIDE); / 打印文件C:Test.txtShellExecute不支持定向输出。CreateProcess原型如下:BOOL CreateProcess(LPCTSTR lpApplicationName, /执行程序名LPTSTR lpCommandLine, / 参数行/下面两个参数描述了所创建的进程和线程的安全属性,如果为 NULL则使用默认的安全属性LPSECURITY_ATTRIBUTES lpProcessAttributes,
15、 / process security attributesLPSECURITY_ATTRIBUTES lpThreadAttributes, / thread security attributesBOOL bInheritHandles, / 继承标志DWORD dwCreationFlags, / 创建标志LPVOID lpEnvironment, / 环境变量LPCTSTR lpCurrentDirectory, / 运行该进程的初始目录LPSTARTUPINFO lpStartupInfo, / 用于在创建子进程时设置各种属性LPPROCESS_INFORMATION lpProce
16、ssInformation /用于在进程创建后接受相关信息使用方法如下:PROCESS_INFORMATION pi;STARTUPINFO si;memset(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,可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最
17、适合自己的方法去实现自己的目的!关于三个 SDK函数: WinExec, ShellExecute,CreateProcess 的注意1、定义头文件在头文件 stdafx.h中必须定义以下两个头文件:#include / 可替换为 windows.h#include 如果定义了头文件 #include 的话就不必定义 #include 了,“windows.h“ 不光是包含了“shellapi.h“,它还定义了许多数据类型,如果没有这些数据类型,shellapi.h 本身会出错。2、定义路径C+中所表示的路径要用 “ “而不是平常所用的“ “,所以以上三个函数表示路径都为:Disk:Directory.File nameWinExec(“D:Program FilesTestTest.exe“,SW_SHOWMAXIMIZED);ShellExecute(NULL,“open“,“C:Test.txt“,NULL,NULL,SW_SHOWNORMAL);bool fRet=CreateProcess(“D:putty.exe“,NULL,NULL,FALSE,NULL,NULL,NULL,NULL,