C程序啟動(dòng)外部程序的方法總結(jié)_第1頁(yè)
C程序啟動(dòng)外部程序的方法總結(jié)_第2頁(yè)
C程序啟動(dòng)外部程序的方法總結(jié)_第3頁(yè)
C程序啟動(dòng)外部程序的方法總結(jié)_第4頁(yè)
C程序啟動(dòng)外部程序的方法總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

使用WinExec命令⑴函數(shù)原型:UINTWinExec(LPCSTRlpCmdLine,UINTuCmdShow);⑵參數(shù):lpCmdLine:指向一個(gè)空結(jié)束的字符串,串中包含將要履行的應(yīng)用程序的命令行(文件名加上可選參數(shù))。uCmdShow:定義Windows應(yīng)用程序的窗口如何顯示,并為CreateProcess函數(shù)供給STARTUPINFO參數(shù)的wShowWindow成員的值。⑶返回值:若函數(shù)調(diào)用成功,則返回值大于31。若函數(shù)調(diào)用失敗,則返回值為以下之一:0:系統(tǒng)存或資源已耗盡。②ERROR_BAD_FORMAT:EXE文件無(wú)效(非Win32.EXE或.EXE影像錯(cuò)誤)。ERROR_FILE_NOT_FOUND:指定的文件未找到。④ERROR_PATH_NOT_FOUND:指定的路徑未找到。固然Microsoft認(rèn)為WinExec已過(guò)時(shí),可是在很多時(shí)候,簡(jiǎn)單的WinExec函數(shù)還是運(yùn)轉(zhuǎn)新程序的最好方式。簡(jiǎn)單地傳遞作為第一個(gè)參數(shù)的命令行,還需要決定如何顯示程序(該程序或許會(huì)忽視它)的第二個(gè)參數(shù)。平時(shí),將其設(shè)置為SW_SHOW,也可試試SW_MINIMIZED或SW_MAXIMIZED。WinExec不一樣意用CreateProcess獲取的所有選項(xiàng),而它的確簡(jiǎn)單。使用ShellExecute命令⑴函數(shù)原型:HINSTANCEShellExecute(HWNDhwnd,LPCTSTRlpOperation,LPCTSTRlpFile,LPCTSTRlpParameters,LPCTSTRlpDirectory,INTnShowCmd);⑵參數(shù):Word資料hwnd:指向父窗口的窗口句柄。此窗口接收應(yīng)用程序產(chǎn)生的任何信息框。lpOperation:一個(gè)空結(jié)束的字符串地點(diǎn),此字符串指定要履行的操作。下邊的操作字符串是有效的:"open"此函數(shù)翻開(kāi)由參數(shù)lpFile指定的文件,此文件能夠是一個(gè)可履行文件或文檔文件,也可是一個(gè)文件夾。"print"此函數(shù)打印由參數(shù)lpFile指定的文件,此文件應(yīng)是一個(gè)文檔文件,若是此文件是一個(gè)可履行文件,則翻開(kāi)此文件。"explore"此函數(shù)搜尋由參數(shù)lpFile指定的文件夾,此文件應(yīng)是一個(gè)文檔文件,此參數(shù)能夠?yàn)榭铡_@類狀況下,函數(shù)用于翻開(kāi)由參數(shù)lpFile指定的文件。lpFile:一個(gè)空結(jié)束的字符串地點(diǎn),此字符串指定要翻開(kāi)或打印的文件或許是要翻開(kāi)或搜尋的文件夾。lpParameters:若是參數(shù)lpFile指定一個(gè)可履行文件,lpParameters則是一個(gè)空結(jié)束的字符串地點(diǎn),此字符串指定要傳達(dá)給應(yīng)用程序的參數(shù)。若是lpFile指定一個(gè)文檔文件,lpParameters應(yīng)為空。lpDirectory:一個(gè)空結(jié)束的字符串地點(diǎn),此字符串指定默認(rèn)目錄。nShowCmd:若是lpFile指定一個(gè)可履行文件,nShowCmd表示應(yīng)用程序翻開(kāi)時(shí)如何顯示。若是lpFile指定一個(gè)文檔文件,nShowCmd應(yīng)為空。⑶返回值:若函數(shù)調(diào)用成功,則返回值大于32,不然為一個(gè)小于等于32的錯(cuò)誤值。說(shuō)明:能夠用此函數(shù)翻開(kāi)或搜尋一個(gè)外殼文件夾。翻開(kāi)文件夾可用下邊任何一種形式: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命令雖已過(guò)時(shí)但易于獲取。該命令向命令解說(shuō)程序提出翻開(kāi)、閱讀或打印文檔或文件夾的懇求,固然能夠用ShellExecute運(yùn)轉(zhuǎn)程序,但平時(shí)只發(fā)送文檔名,而命令解說(shuō)程序則決定要運(yùn)轉(zhuǎn)那個(gè)程序。其余在翻開(kāi)目錄文件夾時(shí),ShellExecute命令特別有用。⑷程序示例下邊經(jīng)過(guò)一個(gè)例子來(lái)說(shuō)名WinExec和ShellExecute的使用。下邊程序有控制臺(tái)程序示例,其使用兩種不一樣的方法,翻開(kāi)文本文件。下邊程序使用WinExec,并明確指定使用記事本程序。而后,使用ShellExecute,翻開(kāi)文本文件。程序清單#include<windows.h>#include<iostream.h>voidmain(intargc,char*argv[]){cout<<”O(jiān)peningwithn”;if(WinExec(“notepadreadme.txt”,SH_SHOW)<32)MessagBox(NULL,”Can’tWinExec”,NULL,MB_OK);cout<<”P(pán)ressn”;MessagBox(NULL,”P(pán)ressOKtocontinue”,”P(pán)rogrmLaunched”,MB_OK);cout<<”O(jiān)peningwithn”;if(ShellExecute(NULL,”open”,”readme.txt”,NULL,NULL,SW_SHOW)<(HANDLE)32)MessagBox(NULL,”Can’tn”,NULL,MB_OK);}使用CreateProcess命令⑴函數(shù)原型:BOOLCreateProcess(LPCTSTRlpApplicationName,Word資料LPTSTRlpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes,LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCTSTRlpCurrentDirectory,LPSTARTUPINFOlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);⑵參數(shù):lpApplicationName:指向一個(gè)以空結(jié)尾的串,他指定了要履行的模塊lpCommandLine:指向一個(gè)以空結(jié)尾的串,該串定義了要履行的命令行。lpProcessAttributes:指向一個(gè)SECURITY_ATTRIBUTES構(gòu)造,該構(gòu)造決定了返回的句柄能否可被子進(jìn)度繼承。lpThreadAttributes:指向一個(gè)SECURITY_ATTRIBUTES構(gòu)造,該構(gòu)造決定了返回的句柄能否可被子進(jìn)度繼承。bInheritHandles,:表示新進(jìn)度能否從調(diào)用進(jìn)度繼承句柄。dwCreationFlags:定義控制優(yōu)先類和進(jìn)度創(chuàng)立的附帶標(biāo)記。lpEnvironment:指向一個(gè)新進(jìn)度的環(huán)境塊。lpCurrentDirectory:指向一個(gè)以空結(jié)尾的串,該串定義了子進(jìn)度的目前驅(qū)動(dòng)器和目前目錄。lpStartupInfo:指向一個(gè)STARTUPINFO構(gòu)造,該構(gòu)造定義了新進(jìn)度的主窗口將如何顯示。lpProcessInformation:指向PROCESS_INFORMATION構(gòu)造,該構(gòu)造接受對(duì)于新進(jìn)度的表示信息。⑶返回值:Word資料若函數(shù)調(diào)用成功,則返回值不為0;若函數(shù)調(diào)用失敗,返回值為0。ShellExecute和WinExec命令用于簡(jiǎn)單的作業(yè)。假如要完整控制一個(gè)新進(jìn)度,就一定調(diào)用CreateProcess。在上述參數(shù)中,參數(shù)lpStartupInfo是STARTUPINFO構(gòu)造。能夠用來(lái)設(shè)置控臺(tái)的標(biāo)題,新窗口的的初始大小和地點(diǎn),及重定向標(biāo)準(zhǔn)輸入和輸出。新程序平時(shí)能夠忽視多半這些數(shù)據(jù)項(xiàng),假如選擇那樣做的話。能夠規(guī)定該構(gòu)造體中的標(biāo)記,已表示要設(shè)置的數(shù)據(jù)段。有時(shí),不想設(shè)置任何信息,也一定傳達(dá)一個(gè)有效的指針給空構(gòu)造(確立設(shè)置大小到cb,及設(shè)置dwFlags成員為0)。參數(shù)lpProcessInformation返回進(jìn)度和線程句柄,還包含進(jìn)度和線程ID。這些句柄擁有在參數(shù)lpProcessAttributes和lpThreadAttributes中規(guī)定的接見(jiàn)。要注意,針對(duì)CreateProcess的一些參數(shù)對(duì)控制臺(tái)應(yīng)用程序是特定的,而其余參數(shù)則對(duì)各樣應(yīng)用程序?qū)嵱?。大部分狀況下,其實(shí)不必定要填入STARTUPINFO構(gòu)造,但不論如何須須供給它。其返回值是布爾型的,而真實(shí)感興趣的返回值發(fā)生于作為參數(shù)傳遞的構(gòu)造中(PROCESS_INFORMATION)。CreateProcess返回該構(gòu)造中的進(jìn)度ID及其句柄,以及初始線程ID及其句柄。能夠?qū)D發(fā)送到其余進(jìn)度,或使用句柄來(lái)控制新進(jìn)度。也能夠考慮C函數(shù):1system( )2spawn( )函數(shù)系列3exec( )函數(shù)系列c++啟動(dòng)exe(外面程序)珍藏對(duì)于三個(gè)SDK函數(shù):WinExec,ShellExecute,CreateProcess的其余注意事項(xiàng):【1】定義頭文件一定定義以下兩個(gè)頭文件:Word資料#include<shlobj.h>//可替代為windows.h#include<shellapi.h>假如定義了頭文件#include<windows.h>的話就不用然義#include<shlobj.h>了。【2】定義路徑C++中所表示的路徑要用"\\"而不是平時(shí)所用的"\",所以以上三個(gè)函數(shù)表示路徑都為:disk:\\Directory\\...\\FilenameWinExec("D:\\ProgramFiles\\Test\\Test.exe",SW_SHOWMAXIMIZED);ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);1、調(diào)用API:intsystem(constchar*command);你能夠傳入一命令,啟動(dòng)某個(gè)程序。如"ping.vccode.","YourExe"等等可是這里有幾點(diǎn)要值得注意:、他不會(huì)馬上返回,直到你啟動(dòng)的程序履行達(dá)成。、假如你啟動(dòng)是windows程序,它仍舊會(huì)啟動(dòng)一個(gè)控制臺(tái),這就給人感覺(jué)太差勁了,但假如自己是控制臺(tái)的,并且又需要等候它的達(dá)成,那這將是比較好的選擇。、它的返回值代表能否履行成功以及程序的退出碼。、不可以運(yùn)轉(zhuǎn)*.txt文件或".百度."2、調(diào)用API:UINTWinExec(LPCSTRlpCmdLine,//commandlineUINTuCmdShow//windowstyleWord資料);這個(gè)API與API:system相同的使用簡(jiǎn)單,同用是使用命令行型式??墒撬cAPI:system對(duì)比,有幾個(gè)長(zhǎng)處:、它將啟動(dòng)了一個(gè)新進(jìn)度,并且馬上返回,所以你的程序無(wú)需等候。、它的多了一個(gè)參數(shù):uCmdShow,經(jīng)過(guò)它你能夠必定程度上控件窗體的顯示,比方讓它后臺(tái)運(yùn)轉(zhuǎn)而不顯示出來(lái)。、它不論啟動(dòng)控制臺(tái)程序還是windows程序都只做你想要做的事。它的不足之處:、它完整與本進(jìn)度離開(kāi),沒(méi)法對(duì)做些必需的控制、沒(méi)法得悉啟動(dòng)的程序能否退出。、得不到啟動(dòng)的程序的退出碼。、不可以運(yùn)轉(zhuǎn)*.txt文件或".百度."3、調(diào)用:HINSTANCEShellExecute(HWNDhwnd,LPCTSTRlpVerb,LPCTSTRlpFile,LPCTSTRlpParameters,LPCTSTRlpDirectory,INTnShowCmd);它也有WinExec相同的弊端。Word資料它固然傳回一個(gè)HINSTANCE,但他其實(shí)不是真實(shí)的句柄,我們僅能拿它來(lái)做一些錯(cuò)誤值檢查。但它的功能比前二者更強(qiáng)盛,它履行系統(tǒng)的Shell命令。1、2中假如傳入“XX.txt”,它們將不可以成功履行ShellExecute,卻能很好地履行,它將啟動(dòng)一個(gè)默認(rèn)的文字辦理程序來(lái)翻開(kāi)它。1、2中假如傳入“.vccode.”,將不可以成功履行,而ShellExecute卻能很好地履行,它將啟動(dòng)一個(gè)默認(rèn)閱讀器來(lái)翻開(kāi)這個(gè)。參數(shù)解說(shuō):參數(shù)1hwnd:一窗體句柄,將作為啟動(dòng)的程序的父窗體。參數(shù)2lpVerb:你想履行的操作(edit、explore、find、open、print、properties),你也能夠傳入NULL值,它將履行默認(rèn)操作(win2000從前與以后辦理略有差異,請(qǐng)見(jiàn)MSDN)。參數(shù)3lpFile:一文件名或操作的對(duì)象。參數(shù)4lpParameters:假如lpFile是一可履行文件,這個(gè)將作為它的參數(shù)。它的格式由履行的操作決定。并且當(dāng)lpFile為一document文件時(shí),此參數(shù)需為NULL。參數(shù)5lpDirectory:指定它的工作目錄。參數(shù)6nShowCmd:窗體顯示的控制。以下是幾個(gè)例子://啟動(dòng)一個(gè)Dos命令,啟動(dòng)windows程序相同Word資料::ShellExecute(this->GetSafeHwnd( ),NULL,"ping",".vccode.",NULL,SW_SHOWNORMAL);//翻開(kāi)一個(gè)文件::ShellExecute(this->GetSafeHwnd( ),"open","ReadMe.txt",NULL,NULL,SW_SHOWNORMAL);上邊的動(dòng)詞可傳可不傳,但假如"ReadMe.txt"為"ReadMe.bat"那就得指定,不然將會(huì)當(dāng)命令履行,而不是翻開(kāi)它。可翻開(kāi)目錄::ShellExecute(this->GetSafeHwnd( ),"open","c:",NULL,NULL,SW_SHOWNORMAL);//可翻開(kāi)網(wǎng)頁(yè)::ShellExecute(this->GetSafeHwnd( ),"open",".vccode.",NULL,NULL,SW_SHOWNORMAL);閱讀一個(gè)目錄ShellExecute(handle,"explore","c:"NULL,NULL,SW_SHOWNORMAL);查察一個(gè)文件或目錄的屬性使用ShellExecuteEx,實(shí)現(xiàn)請(qǐng)見(jiàn)所附源碼對(duì)應(yīng)部分假如沒(méi)有特別的控制要求,它己能為我們做很了,但當(dāng)我們必定要能控件這個(gè)啟動(dòng)的進(jìn)度時(shí),那我們就得使用第4點(diǎn)了。Word資料4:調(diào)用API:BOOLCreateProcess(LPCTSTRlpApplicationName,//nameofexecutablemoduleLPTSTRlpCommandLine,//commandlinestringLPSECURITY_ATTRIBUTESlpProcessAttributes,//SDLPSECURITY_ATTRIBUTESlpThreadAttributes,//SDBOOLbInheritHandles,//handleinheritanceoptionDWORDdwCreationFlags,//creationflagsLPVOIDlpEnvironment,//newenvironmentblockLPCTSTRlpCurrentDirectory,//currentdirectorynameLPSTARTUPINFOlpStartupInfo,//startupinformationLPPROCESS_INFORMATIONlpProcessInformation//processinformation);常常看到這個(gè)函數(shù)就讓人生畏,它參數(shù)多,并且參數(shù)種類也這樣莫生。是的,正是由于這樣它才功能強(qiáng)盛!但不要怕,作為一般使用,特別簡(jiǎn)單!下邊即是一個(gè)簡(jiǎn)單的例子(啟動(dòng)記事本):STARTUPINFOStartInfo;PROCESS_INFORMATIONpinfo;//對(duì)程序的啟動(dòng)信息不作任何設(shè)定,所有清0Word資料memset(&StartInfo,0,sizeof(STARTUPINFO));StartInfo.cb=sizeof(STARTUPINFO);//設(shè)定構(gòu)造的大小BOOLret=CreateProcess(NULL,//啟動(dòng)程序路徑名"notepad.exe",//參數(shù)(當(dāng)exeName為NULL時(shí),可將命令放入?yún)?shù)前)NULL,//使用默認(rèn)進(jìn)度安全屬性NULL,//使用默認(rèn)線程安全屬性FALSE,//句柄不繼承NORMAL_PRIORITY_CLASS,//使用正常優(yōu)先級(jí)NULL,//使用父進(jìn)度的環(huán)境變量NULL,//指定工作目錄&StartInfo,//子進(jìn)度主窗口如何顯示&pinfo);//用于寄存新進(jìn)度的返回信息這樣在創(chuàng)立成功這后我們就能夠從pinfo中找到它的:進(jìn)度句柄,線程句柄,進(jìn)度ID,線程ID在附件源碼中演示了進(jìn)度序的啟動(dòng),停止。實(shí)質(zhì)上我們能夠經(jīng)過(guò)很多方式如存共享、父進(jìn)度窗體句體傳入仍后從信息中獲取子進(jìn)度窗體句柄等,來(lái)實(shí)現(xiàn)更多的控制。Word資料想很好地掌握CreateProcess,可拜見(jiàn)人民郵電第一版社第一版的<<Windows系統(tǒng)編程>>,它的“進(jìn)度”部份作了很詳細(xì)的說(shuō)明。例程:#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("翻開(kāi)目錄\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的第二個(gè)參數(shù)為你想履行的操作(edit,explore,find,open,print,properties),也可為NULL*/}/*SW_HIDEHide

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論