




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
使用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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 豆類食品加工過程中的質量控制考核試卷
- 2024年軌道交通裝備用涂料資金申請報告代可行性研究報告
- 2025年JAVA系統優化報告試題及答案
- 直播流量分成與平臺生態建設合作協議
- 2025年中國閉合裝置行業市場前景預測及投資價值評估分析報告
- 美容美發連鎖品牌品牌加盟店人力資源配置與培訓合同
- 2025年中國背包行業市場投資可行性調研報告
- 時尚潮流文化創意工作室普通合伙經營協議
- 抖音火花內部團隊技能提升合作協議
- 2025年中國薄膜收卷機行業市場前景預測及投資價值評估分析報告
- GB/T 17468-1998電力變壓器選用導則
- 有機化學課件第十九章
- 工程部部門級安全培訓課件
- DB42T1745-2021橋梁高強度螺栓連接安裝技術指南
- 實驗室安全記錄表
- 進出口業務內部審計制
- 揚塵污染防治監理實施細則
- 教科版二年級下冊各單元知識整理復習及思維導圖-課件
- 四年級下冊數學課件-3 乘法分配律2-冀教版14張PPT
- 《學弈》優質課教學課件
- 2022年檢驗科三基試題及答案
評論
0/150
提交評論