ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:22.56KB ,
资源ID:10407392      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10407392.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++调用其他EXE文件.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++调用其他EXE文件.docx

1、C+调用其他EXE文件在c+中调用*.exe可执行程序的方法怎样加载其他的应用程序?三个SDK函数winexec,shellexecute,createprocess可以使用。WinExec最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说一下,比如用SW_SHOWMAXMIZED方式去加载一个无最大化按钮的程序,就是Neterm,calc等等,就不会出现正常的窗体,但是已经被加到任务列表里了。ShellExecute较WinExex灵活一点,可以指定工作目录,下面的Example就是直接打开c:temp1.txt,而不用加载与txt文件关联的应用程序,很多安装程序完成后都

2、会打开一个窗口,来显示Readme or Faq,我猜就是这么作的啦.ShellExecute(NULL,NULL,_T(1.txt),NULL,_T(c:temp),SW_SHOWMAXMIZED) CreateProcess最复杂,一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等.来看个很简单的Example: STARTUPINFO stinfo /启动窗口的信息 PROCESSINFO procinfo /进程的信息 CreateProcess(NULL,_T(notepad.exe),NULL,NULL.FALSE, NORMAL_P

3、RIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo)常用举例:1、函数:system(C:Program FilesWindows NThypertrm.exe );2、调用 EXE文件有个比较简单的方法就是这样WinExec(c:windowssystem32cmd.exe,1);3、调用打开EXE文件的方法最方便的就是使用ShellExecute函数,格式就是一楼所提到的那样,为你exe文件所在路径,例 如:X:XXXXXX.exe,另外该函数还能打开ie网页和其他各种类型的文件(txt,bmp,jpg,mp3,avi,wmv等等), 只要是系统能够识别

4、的都能打开ShellExecute(handle, open, , NULL, NULL, SW_SHOWNORMAL);这个不可思议的函数就是:ShellExecute,取代了WinExec。你可以给它任何文件的名字,它都能识别出来并打开它。例如: ShellExecute(NULL,open,iloveu.bmp,NULL,NULL,SW_SHOWNORMAL);用缺省的位图编辑器打开一个叫iloveu.bmp的位图文件,这个缺省的位图编辑器可能是Microsoft Paint, Adobe Photoshop, 或者 Corel PhotoPaint。有关ShellExecute的详细用

5、法信息自己去参考有关资料吧,重要的是你知道了这个函数能打开任何文件,甚至是桌面和URL快捷方式( .ink或 .url)。ShellExecute解析系统注册表HKEY_CLASSES_ROOT中所有的内容,判断启动那一个执行程序,并且启动一个新的实例或使用DDE将文件名连到一打开的实例。然后,ShellExecute 返回打开文件的应用的实例句柄。 更奇妙的是ShellExecute不仅能打开机器上的文件,还能打开Internet的站点地址。例如:ShellExecute(NULL, open, , NULL, NULL, SW_SHOWNORMAL); 这个代码使你能访问微软的主页。当Sh

6、ellExecute遇到文件名前面的“http:”时,可以判断出要打开的文件是Web文件,随之启动Internet Explorer 或者 Netscape Navigator 或者任何你使用的别的浏览器打开文件。ShellExecute还能识别其它协议,象FTP、GOPHER。甚至识别“mailto”,如果文件名指向 “mailto:zxn”,它启动电子邮件程序并打开一个待编辑的新邮件。总之,ShellExecute函数就是如此简单 地打开磁盘文件和Internet文件。如果将第二个参数“OPEN”改为“PRINT”或者“EXPLORE”,ShellExecute将能打印文件 和打开文件夹。

7、ShellExecute还有一个扩展函数ShellExecuteEx,所带参数中有一个特殊的结构,功能更强,它的用法参见有关文 档。 现在,你知道了ShellExecute的秘密,用它很容易增加一个链接到你的About对话框。不是吗。:)Q&AQ: 如何打开一个应用程序?ShellExecute(this-m_hWnd,open,calc.exe, SW_SHOW );或ShellExecute(this-m_hWnd,open,notepad.exe,c:MyLog.log,SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。Q: 如何打开一个同系统程序相关连的文档?ShellE

8、xecute(this-m_hWnd,open,c:abc.txt,SW_SHOW );Q: 如何打开一个网页?ShellExecute(this-m_hWnd,open, SW_SHOW );Q: 如何激活相关程序,发送EMAIL?ShellExecute(this-m_hWnd,open,mailto:nishinapp, SW_SHOW );Q: 如何用系统打印机打印文档?ShellExecute(this-m_hWnd,print,c:abc.txt, SW_HIDE);Q: 如何用系统查找功能来查找指定文件?ShellExecute(m_hWnd,find,d:nish,NULL,N

9、ULL,SW_SHOW);Q: 如何启动一个程序,直到它运行结束?SHELLEXECUTEINFO ShExecInfo = 0;ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = NULL;ShExecInfo.lpFile = c:MyProgram.exe;ShExecInfo.lpParameters = ;ShExecInfo.lpDirectory = NULL;ShExec

10、Info.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);WaitForSingleObject(ShExecInfo.hProcess,INFINITE);或:PROCESS_INFORMATION ProcessInfo;STARTUPINFO StartupInfo; /This is an in parameterZeroMemory(&StartupInfo, sizeof(StartupInfo);StartupInfo.cb = sizeof StartupInfo ; /Only co

11、mpulsory fieldif(CreateProcess(c:winntnotepad.exe, NULL, NULL,NULL,FALSE,0,NULL, NULL,&StartupInfo,&ProcessInfo) WaitForSingleObject(ProcessInfo.hProcess,INFINITE); CloseHandle(ProcessInfo.hThread); CloseHandle(ProcessInfo.hProcess);else MessageBox(The process could not be started.);Q: 如何显示文件或文件夹的属性

12、?SHELLEXECUTEINFO ShExecInfo =0;ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = properties;ShExecInfo.lpFile = c:; /can be a file as wellShExecInfo.lpParameters = ;ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SH

13、OW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);或BOOL ret = 0;STARTUPINFO info;memset(&info, 0, sizeof(info);info.cb = sizeof(info);info.dwFlags = STARTF_USESHOWWINDOW;info.wShowWindow = show_hide;SW_HIDE;PROCESS_INFORMATION pinfo;pinfo.hProcess = NULL;pinfo.hThread = NULL;pinfo.dwProcessI

14、d = NULL;pinfo.dwThreadId = NULL;ret = CreateProcess(NULL,szExePath,NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,NULL, NULL, &info, &pinfo);C+调用exe文件当项目比较大的时候,通常会分开来开发,如果分开的部分只是一些函数或类,整合的时候就可以使用静态库或动态库。但如果分开的是一个exe文件,整合的时候,就要通过调用exe文件来使用。尤其是当第三方软件是一个用c语言编写的exe文件时,更是需要如此。最近在我所开发的LCDS系统当中就碰到了这样的问题。他需要调用一个

15、分类器来处理数据,而手头上的分类器是经典的C4.5决策树分类器,它是用c语言写 的,没有.h头文件,生成的是一个exe文件,通过在命令行执行main函数来处理数据。如果想把其改成静态库或动态库,因为没有头文件,改写后似乎不好 调用其函数,因此考虑直接调用其生成的exe文件。可考虑的方法有: 1.使用system函数2.使用execl或execv函数3.使用WinExec函数4.使用CreateProcess函数5.使用ShellExecuteEx函数 system函数和execl、execv函数不能控制程序窗口是否显示,我要的效果是不显示该exe程序的窗口,所以这两种方法不予考虑。 WinEx

16、ec函数不好控制主程序来等该exe程序的结束,所以放弃。CreateProcess函数是新建一个进程,所以,你必须人为地控制该进程的生 死,不如ShellExecuteEx方便,所以最终我选择的是ShellExecuteEx函数。程序如下:SHELLEXECUTEINFO ShExecInfo = 0;ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = _T(open);ShExecIn

17、fo.lpFile = _T(c4.5.exe);ShExecInfo.lpParameters = _T(-f train);ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_HIDE;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);WaitForSingleObject(ShExecInfo.hProcess,INFINITE);/这句很重要,一定要写,是等待这个.exe运行结束后再向下执行,特别是下面的代码依赖于.exe的运行结果时。ShellExecuteEx 的参数在C

18、+中其结构为:typedef struct _SHELLEXECUTEINFO DWORD cbSize; /typedef unsigned long DWORD;ULONG fMask;HWND hwnd;LPCTSTR lpVerb;LPCTSTR lpFile;LPCTSTR lpParameters;LPCTSTR lpDirectory;int nShow;HINSTANCE hInstApp;LPVOID lpIDList;LPCTSTR lpClass;HKEY hkeyClass;DWORD dwHotKey;union HANDLE hIcon;HANDLE hMonito

19、r; DUMMYUNIONNAME;HANDLE hProcess; SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;参数详解:cbSize存储该结构的长度,以字节为单位。fMask一个标志数组,用来设置其他成员的有效性SEE_MASK_CLASSKEY 0x3SEE_MASK_CLASSNAME 0x1SEE_MASK_CONNECTNETDRV 0x80SEE_MASK_DOENVSUBST 0x200SEE_MASK_FLAG_DDEWAIT 0x100SEE_MASK_FLAG_LOG_USAGE 0x4000000SEE_MASK_FLAG_NO_UI 0

20、x400SEE_MASK_HMONITOR 0x200000SEE_MASK_HOTKEY 0x20SEE_MASK_ICON 0x10SEE_MASK_IDLIST 0x4SEE_MASK_INVOKEIDLIST 0xCSEE_MASK_NOASYNC 0x100000SEE_MASK_NOCLOSEPROCESS 0x40SEE_MASK_NOZONECHECKS 0x800000SEE_MASK_NO_CONSOLE 0x8000SEE_MASK_UNICODE 0x100000SEE_MASK_FILEANDURL 0x4000000hwnd调用这个ShellExecuteEx的窗口

21、句柄lpVerb设定这个ShellExecuteEx的动作,包括: edit 打开编辑器编辑文档,如果 lpFile 不是一个文档,则这个函数会失败 explore 以 lpFile 为路径打开资源管理器 find 从指定目录开始搜索 open 根据 lpFile 打开对应文件,该文件可以为可执行文件、文档或者文件夹 print 根据 lpFile 打印文档,若lpFile不是一个文档则该函数会失败properties 显示文件或文件夹的属性lpFile 以0 结尾的字符串,指出 lpVerb 的操作对象的路径,被系统支持的操作包括文本的 open 、 print等,其中print要求必须有一

22、个已经注册的打印机,而其他种类的文档会通过系统关联进行查询执行。若要设置一个空的namespace,则需 要设置fMask的值为see_mask_invokeidlist。注意:若see_mask_invokeidlist已设置,则可以藉由 lpFile或者lpIDList确定item的系统路径或者PIDLlpParameters运行/打开程序的参数,如果打开的是一个文档,则该项无效lpDirectory指明工作目录的名字,成员没有说明,则默认为当前目录nShow说明ShellExecuteEx打开的程序将以什么形式出现hInstApp如果函数运行成功,该项的值将大于32,否则会是下列错误对应

23、的值 SE_ERR_FNF没有找到文件 SE_ERR_PNF 没有找到路径 SE_ERR_ACCESSDENIED 拒绝访问 SE_ERR_OOM 内存不足 SE_ERR_DLLNOTFOUND 没有找到动态链接库 SE_ERR_SHARE 不能操作一个以打开的文件 SE_ERR_ASSOCINCOMPLETE 文件关联信息不完整 SE_ERR_DDETIMEOUT DDE操作超时 SE_ERR_DDEFAIL DDE操作失败 SE_ERR_DDEBUSY DDE繁忙 SE_ERR_NOASSOC 没有找到文件关联lpIDList一个itemidlist结构的地址,用来存储成员的特别标识符,当

24、fMask不包括see_mask_idlistsee_mask_ invokeidlist 时该项被忽略lpClass用以指明文件类别的名字或GUID,当fMask不包括see_mask_classname时该项被忽略hkeyClass获得已在系统注册的文件类型的Handle,当fMask不包括see_mask_classkey时该项被忽略dwHotKey程序的热键关联,低位存储虚拟关键码(Key Code),高位存储修改标志位(HOTKEYF_),修改标志(modifier flags)的详细列表请看wm_sethotkey消息的描述,当fmask不包括see_mask_hotkey时该项被

25、忽略DUMMYUNIONNAMEhIcon取得对应文件类型的图标的Handle,当fMask不包括SEE_MASK_ICON时该项被忽略hMonitor将文档显示在显示器上的Handle,当fMask不包括SEE_MASK_HMONITOR时该项被忽略hProcess用于进行return操作的成员,若fMask不设为see_mask_nocloseprocess则该项值为null,即使fMask设为see_mask_nocloseprocess,若没有进程启动,该项值仍为null。即没有新的进程启动,则该项值一只为nullShellExecuteEx的用法 关于如何在c+中启动外部的exe程序

26、,之前看到在XX一搜就看到了: ShellExecute(this-m_hWnd,open,calc.exe, SW_SHOW ); 经验证果然可以,一条语句直接就启动了。之后我想在我的代码结束时也把这个exe程序给关闭了,按照网上的做法直接TerminateProcess(HINSTANCE,0)就不行了,参数根本就不能是HINSTANCE类型;然后使用send Message(WM_Close,.)也不行,原因应该是我的exe程序根本就没有窗口;最后使用了ShellExecuteEx,总算搞定了。附上代码:启动:SHELLEXECUTEINFO ShExecInfo;ShExecInfo.

27、cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = NULL;ShExecInfo.lpFile = xxx.exe; /can be a file as wellShExecInfo.lpParameters = ;ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecute

28、Ex(&ShExecInfo);关闭:if( ShExecInfo.hProcess != NULL) TerminateProcess(ShExecInfo.hProcess,0); ShExecInfo.hProcess = NULL;WinExec概述WinExec VB声明注意该函数只提供对16位机子的兼容。应用程序应该使用CreateProcess函数。Declare Function WinExec Lib kernel32 Alias WinExec (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long 说明 运行指定的程序 返回值 Long,大于32表示成功,请参考FindExecutable函数 参数表 参数 类型及说明 lpCmdLine String,包含要执行的命令行 nCmdShow Long,定义了以怎样的形式启动程序的常数值。参考ShowWindow函数的nCmdShow参数 注解 请参考对CreateProcess函数的说明,了解在目录中查找指定文件的顺序VC中如何使用WINSHELLAPI void WINAPI WinExecErrorA(HWND hwnd, int error, L

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1