C程序启动外部程序的方法总结_第1页
C程序启动外部程序的方法总结_第2页
C程序启动外部程序的方法总结_第3页
C程序启动外部程序的方法总结_第4页
C程序启动外部程序的方法总结_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用WinExec命令⑴函数原型:UINTWinExec(LPCSTRlpCmdLine,UINTuCmdShow);⑵参数:lpCmdLine:指向一个空结束的字符串,串中包含将要履行的应用程序的命令行(文件名加上可选参数)。uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数供给STARTUPINFO参数的wShowWindow成员的值。⑶返回值:若函数调用成功,则返回值大于31。若函数调用失败,则返回值为以下之一:0:系统存或资源已耗尽。②ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。ERROR_FILE_NOT_FOUND:指定的文件未找到。④ERROR_PATH_NOT_FOUND:指定的路径未找到。固然Microsoft认为WinExec已过时,可是在很多时候,简单的WinExec函数还是运转新程序的最好方式。简单地传递作为第一个参数的命令行,还需要决定如何显示程序(该程序或许会忽视它)的第二个参数。平时,将其设置为SW_SHOW,也可试试SW_MINIMIZED或SW_MAXIMIZED。WinExec不一样意用CreateProcess获取的所有选项,而它的确简单。使用ShellExecute命令⑴函数原型:HINSTANCEShellExecute(HWNDhwnd,LPCTSTRlpOperation,LPCTSTRlpFile,LPCTSTRlpParameters,LPCTSTRlpDirectory,INTnShowCmd);⑵参数:Word资料hwnd:指向父窗口的窗口句柄。此窗口接收应用程序产生的任何信息框。lpOperation:一个空结束的字符串地点,此字符串指定要履行的操作。下边的操作字符串是有效的:"open"此函数翻开由参数lpFile指定的文件,此文件能够是一个可履行文件或文档文件,也可是一个文件夹。"print"此函数打印由参数lpFile指定的文件,此文件应是一个文档文件,若是此文件是一个可履行文件,则翻开此文件。"explore"此函数搜寻由参数lpFile指定的文件夹,此文件应是一个文档文件,此参数能够为空。这类状况下,函数用于翻开由参数lpFile指定的文件。lpFile:一个空结束的字符串地点,此字符串指定要翻开或打印的文件或许是要翻开或搜寻的文件夹。lpParameters:若是参数lpFile指定一个可履行文件,lpParameters则是一个空结束的字符串地点,此字符串指定要传达给应用程序的参数。若是lpFile指定一个文档文件,lpParameters应为空。lpDirectory:一个空结束的字符串地点,此字符串指定默认目录。nShowCmd:若是lpFile指定一个可履行文件,nShowCmd表示应用程序翻开时如何显示。若是lpFile指定一个文档文件,nShowCmd应为空。⑶返回值:若函数调用成功,则返回值大于32,不然为一个小于等于32的错误值。说明:能够用此函数翻开或搜寻一个外壳文件夹。翻开文件夹可用下边任何一种形式:ShellExecute(handle,NULL,path_to_folder,NULL,NULL,SW_SHOWNORMAL);或ShellExecute(handle,"open",path_to_folder,NULL,NULL,SW_SHOWNORMAL);搜寻文件夹,可用以下形式Word资料ShellExecute(handle,"explore",path_to_folder,NULL,NULL,SW_SHOWNORMAL);ShellExecute命令虽已过时但易于获取。该命令向命令解说程序提出翻开、阅读或打印文档或文件夹的恳求,固然能够用ShellExecute运转程序,但平时只发送文档名,而命令解说程序则决定要运转那个程序。其余在翻开目录文件夹时,ShellExecute命令特别有用。⑷程序示例下边经过一个例子来说名WinExec和ShellExecute的使用。下边程序有控制台程序示例,其使用两种不一样的方法,翻开文本文件。下边程序使用WinExec,并明确指定使用记事本程序。而后,使用ShellExecute,翻开文本文件。程序清单#include<windows.h>#include<iostream.h>voidmain(intargc,char*argv[]){cout<<”Openingwithn”;if(WinExec(“notepadreadme.txt”,SH_SHOW)<32)MessagBox(NULL,”Can’tWinExec”,NULL,MB_OK);cout<<”Pressn”;MessagBox(NULL,”PressOKtocontinue”,”ProgrmLaunched”,MB_OK);cout<<”Openingwithn”;if(ShellExecute(NULL,”open”,”readme.txt”,NULL,NULL,SW_SHOW)<(HANDLE)32)MessagBox(NULL,”Can’tn”,NULL,MB_OK);}使用CreateProcess命令⑴函数原型:BOOLCreateProcess(LPCTSTRlpApplicationName,Word资料LPTSTRlpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes,LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCTSTRlpCurrentDirectory,LPSTARTUPINFOlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);⑵参数:lpApplicationName:指向一个以空结尾的串,他指定了要履行的模块lpCommandLine:指向一个以空结尾的串,该串定义了要履行的命令行。lpProcessAttributes:指向一个SECURITY_ATTRIBUTES构造,该构造决定了返回的句柄能否可被子进度继承。lpThreadAttributes:指向一个SECURITY_ATTRIBUTES构造,该构造决定了返回的句柄能否可被子进度继承。bInheritHandles,:表示新进度能否从调用进度继承句柄。dwCreationFlags:定义控制优先类和进度创立的附带标记。lpEnvironment:指向一个新进度的环境块。lpCurrentDirectory:指向一个以空结尾的串,该串定义了子进度的目前驱动器和目前目录。lpStartupInfo:指向一个STARTUPINFO构造,该构造定义了新进度的主窗口将如何显示。lpProcessInformation:指向PROCESS_INFORMATION构造,该构造接受对于新进度的表示信息。⑶返回值:Word资料若函数调用成功,则返回值不为0;若函数调用失败,返回值为0。ShellExecute和WinExec命令用于简单的作业。假如要完整控制一个新进度,就一定调用CreateProcess。在上述参数中,参数lpStartupInfo是STARTUPINFO构造。能够用来设置控台的标题,新窗口的的初始大小和地点,及重定向标准输入和输出。新程序平时能够忽视多半这些数据项,假如选择那样做的话。能够规定该构造体中的标记,已表示要设置的数据段。有时,不想设置任何信息,也一定传达一个有效的指针给空构造(确立设置大小到cb,及设置dwFlags成员为0)。参数lpProcessInformation返回进度和线程句柄,还包含进度和线程ID。这些句柄拥有在参数lpProcessAttributes和lpThreadAttributes中规定的接见。要注意,针对CreateProcess的一些参数对控制台应用程序是特定的,而其余参数则对各样应用程序实用。大部分状况下,其实不必定要填入STARTUPINFO构造,但不论如何须须供给它。其返回值是布尔型的,而真实感兴趣的返回值发生于作为参数传递的构造中(PROCESS_INFORMATION)。CreateProcess返回该构造中的进度ID及其句柄,以及初始线程ID及其句柄。能够将ID发送到其余进度,或使用句柄来控制新进度。也能够考虑C函数:1system( )2spawn( )函数系列3exec( )函数系列c++启动exe(外面程序)珍藏对于三个SDK函数:WinExec,ShellExecute,CreateProcess的其余注意事项:【1】定义头文件一定定义以下两个头文件:Word资料#include<shlobj.h>//可替代为windows.h#include<shellapi.h>假如定义了头文件#include<windows.h>的话就不用然义#include<shlobj.h>了。【2】定义路径C++中所表示的路径要用"\\"而不是平时所用的"\",所以以上三个函数表示路径都为:disk:\\Directory\\...\\FilenameWinExec("D:\\ProgramFiles\\Test\\Test.exe",SW_SHOWMAXIMIZED);ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);1、调用API:intsystem(constchar*command);你能够传入一命令,启动某个程序。如"ping.vccode.","YourExe"等等可是这里有几点要值得注意:、他不会马上返回,直到你启动的程序履行达成。、假如你启动是windows程序,它仍旧会启动一个控制台,这就给人感觉太差劲了,但假如自己是控制台的,并且又需要等候它的达成,那这将是比较好的选择。、它的返回值代表能否履行成功以及程序的退出码。、不可以运转*.txt文件或".百度."2、调用API:UINTWinExec(LPCSTRlpCmdLine,//commandlineUINTuCmdShow//windowstyleWord资料);这个API与API:system相同的使用简单,同用是使用命令行型式。可是它与API:system对比,有几个长处:、它将启动了一个新进度,并且马上返回,所以你的程序无需等候。、它的多了一个参数:uCmdShow,经过它你能够必定程度上控件窗体的显示,比方让它后台运转而不显示出来。、它不论启动控制台程序还是windows程序都只做你想要做的事。它的不足之处:、它完整与本进度离开,没法对做些必需的控制、没法得悉启动的程序能否退出。、得不到启动的程序的退出码。、不可以运转*.txt文件或".百度."3、调用:HINSTANCEShellExecute(HWNDhwnd,LPCTSTRlpVerb,LPCTSTRlpFile,LPCTSTRlpParameters,LPCTSTRlpDirectory,INTnShowCmd);它也有WinExec相同的弊端。Word资料它固然传回一个HINSTANCE,但他其实不是真实的句柄,我们仅能拿它来做一些错误值检查。但它的功能比前二者更强盛,它履行系统的Shell命令。1、2中假如传入“XX.txt”,它们将不可以成功履行ShellExecute,却能很好地履行,它将启动一个默认的文字办理程序来翻开它。1、2中假如传入“.vccode.”,将不可以成功履行,而ShellExecute却能很好地履行,它将启动一个默认阅读器来翻开这个。参数解说:参数1hwnd:一窗体句柄,将作为启动的程序的父窗体。参数2lpVerb:你想履行的操作(edit、explore、find、open、print、properties),你也能够传入NULL值,它将履行默认操作(win2000从前与以后办理略有差异,请见MSDN)。参数3lpFile:一文件名或操作的对象。参数4lpParameters:假如lpFile是一可履行文件,这个将作为它的参数。它的格式由履行的操作决定。并且当lpFile为一document文件时,此参数需为NULL。参数5lpDirectory:指定它的工作目录。参数6nShowCmd:窗体显示的控制。以下是几个例子://启动一个Dos命令,启动windows程序相同Word资料::ShellExecute(this->GetSafeHwnd( ),NULL,"ping",".vccode.",NULL,SW_SHOWNORMAL);//翻开一个文件::ShellExecute(this->GetSafeHwnd( ),"open","ReadMe.txt",NULL,NULL,SW_SHOWNORMAL);上边的动词可传可不传,但假如"ReadMe.txt"为"ReadMe.bat"那就得指定,不然将会当命令履行,而不是翻开它。可翻开目录::ShellExecute(this->GetSafeHwnd( ),"open","c:",NULL,NULL,SW_SHOWNORMAL);//可翻开网页::ShellExecute(this->GetSafeHwnd( ),"open",".vccode.",NULL,NULL,SW_SHOWNORMAL);阅读一个目录ShellExecute(handle,"explore","c:"NULL,NULL,SW_SHOWNORMAL);查察一个文件或目录的属性使用ShellExecuteEx,实现请见所附源码对应部分假如没有特别的控制要求,它己能为我们做很了,但当我们必定要能控件这个启动的进度时,那我们就得使用第4点了。Word资料4:调用API:BOOLCreateProcess(LPCTSTRlpApplicationName,//nameofexecutablemoduleLPTSTRlpCommandLine,//commandlinestringLPSECURITY_ATTRIBUTESlpProcessAttributes,//SDLPSECURITY_ATTRIBUTESlpThreadAttributes,//SDBOOLbInheritHandles,//handleinheritanceoptionDWORDdwCreationFlags,//creationflagsLPVOIDlpEnvironment,//newenvironmentblockLPCTSTRlpCurrentDirectory,//currentdirectorynameLPSTARTUPINFOlpStartupInfo,//startupinformationLPPROCESS_INFORMATIONlpProcessInformation//processinformation);常常看到这个函数就让人生畏,它参数多,并且参数种类也这样莫生。是的,正是由于这样它才功能强盛!但不要怕,作为一般使用,特别简单!下边即是一个简单的例子(启动记事本):STARTUPINFOStartInfo;PROCESS_INFORMATIONpinfo;//对程序的启动信息不作任何设定,所有清0Word资料memset(&StartInfo,0,sizeof(STARTUPINFO));StartInfo.cb=sizeof(STARTUPINFO);//设定构造的大小BOOLret=CreateProcess(NULL,//启动程序路径名"notepad.exe",//参数(当exeName为NULL时,可将命令放入参数前)NULL,//使用默认进度安全属性NULL,//使用默认线程安全属性FALSE,//句柄不继承NORMAL_PRIORITY_CLASS,//使用正常优先级NULL,//使用父进度的环境变量NULL,//指定工作目录&StartInfo,//子进度主窗口如何显示&pinfo);//用于寄存新进度的返回信息这样在创立成功这后我们就能够从pinfo中找到它的:进度句柄,线程句柄,进度ID,线程ID在附件源码中演示了进度序的启动,停止。实质上我们能够经过很多方式如存共享、父进度窗体句体传入仍后从信息中获取子进度窗体句柄等,来实现更多的控制。Word资料想很好地掌握CreateProcess,可拜见人民邮电第一版社第一版的<<Windows系统编程>>,它的“进度”部份作了很详细的说明。例程:#include<windows.h>#include<shellapi.h>#include<stdio.h>voidmain( ){HWNDhandle;printf("Function<WinExec>:\nItcanrunacmdcommand,butcan`topen*.txtand\".*.*\"\n");printf("PleasepressEntergoon\n");getchar( );WinExec("mspaint.exe",SW_SHOWNOACTIVATE);printf("Function<ShellExecute>:\nItcanrunacmdcommandtoopenfileorweb\n\n");getchar( );printf("Openatxtfile\n");ShellExecute(NULL,"open","C:\\test.txt",NULL,NULL,SW_MINIMIZE);getchar( );printf("Openaweb\n");Word资料ShellExecute(NULL,NULL,".百度.",NULL,NULL,SW_SHOWNA);getchar( );printf("Runacmdcommand:ping.sina.\n");ShellExecute(NULL,NULL,"ping","sina.",NULL,SW_SHOWNORMAL);getchar( );printf("翻开目录\n");ShellExecute(NULL,"open","c:",NULL,NULL,SW_SHOWNORMAL);getchar( );printf("阅读目录\n");ShellExecute(NULL,"explore","c:",NULL,NULL,SW_SHOWNORMAL);getchar( );printf("文件属性\n");ShellExecute(handle,"properties","C:\\test.txt",NULL,NULL,SW_MINIMIZE);printf("%s",handle);}/*shellExecute的第二个参数为你想履行的操作(edit,explore,find,open,print,properties),也可为NULL*/}/*SW_HIDEHide

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论