操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程的創(chuàng)建_第1頁(yè)
已閱讀1頁(yè),還剩24頁(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)介

1、<p>  計(jì)算機(jī)學(xué)院網(wǎng)絡(luò)工程專業(yè)</p><p>  《操作系統(tǒng)課程設(shè)計(jì)》報(bào)告</p><p><b>  ——進(jìn)程的創(chuàng)建</b></p><p>  (2012/2013學(xué)年 第一學(xué)期)</p><p>  2012年 12 月 30日</p><p><b>  目錄&l

2、t;/b></p><p>  第一章 課程設(shè)計(jì)概述1</p><p>  1.1 課程設(shè)計(jì)的目的與意義1</p><p>  1.1.1 目的1</p><p>  1.1.2 意義1</p><p>  1.2 實(shí)驗(yàn)概述1</p><p>  1.2.1 實(shí)驗(yàn)名稱1<

3、/p><p>  1.2.2 實(shí)驗(yàn)?zāi)康?</p><p>  1.2.3 實(shí)驗(yàn)要求1</p><p>  1.2.4 實(shí)驗(yàn)內(nèi)容2</p><p>  第二章API函數(shù)簡(jiǎn)介3</p><p>  2.1 API的定義3</p><p>  2.2 windows API3</p>

4、;<p>  2.3開放API函數(shù)3</p><p>  第三章 相關(guān)API函數(shù)5</p><p>  3.1 CreateProcess()5</p><p>  3.2 GetVersionEX()7</p><p>  3.3 ReleaseMutex()8</p><p>  3.4 E

5、xitProcess()8</p><p>  3.5 GetexitCodeProcess()8</p><p>  3.6 STARTUPINFO結(jié)構(gòu)9</p><p>  3.7 PROCESS_INFORMATION 結(jié)構(gòu)12</p><p>  3.8 GetStartupInfo12</p><p&g

6、t;  3.9 ShowWindow13</p><p>  3.10 InternetGetConnectedState13</p><p>  第四章 實(shí)驗(yàn)結(jié)果與分析14</p><p>  4.1 實(shí)驗(yàn)結(jié)果14</p><p>  4.2 實(shí)驗(yàn)結(jié)果分析16</p><p><b>  結(jié)束語(yǔ)

7、18</b></p><p><b>  參考文獻(xiàn)19</b></p><p><b>  附錄20</b></p><p>  第一章 課程設(shè)計(jì)概述</p><p>  1.1 課程設(shè)計(jì)的目的與意義</p><p><b>  1.1.1 目的&l

8、t;/b></p><p>  本課程設(shè)計(jì)是為了配合操作系統(tǒng)課程的理論教學(xué)而設(shè)置的,目的是通過(guò)課程設(shè)計(jì)的綜合訓(xùn)練,加強(qiáng)學(xué)生對(duì)操作系統(tǒng)概念的實(shí)際應(yīng)用技能的訓(xùn)練,提高學(xué)生分析問(wèn)題和解決問(wèn)題的能力。</p><p><b>  1.1.2 意義</b></p><p>  本次操作系統(tǒng)課程設(shè)計(jì)的主要任務(wù)是進(jìn)行系統(tǒng)級(jí)的程序設(shè)計(jì)。本課程設(shè)計(jì)是操作系

9、統(tǒng)原理課程的延伸。通過(guò)該課程設(shè)計(jì),使學(xué)生更好地掌握操作系統(tǒng)各部分結(jié)構(gòu)、實(shí)現(xiàn)機(jī)理和各種典型算法,加深對(duì)操作系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)思路的理解,培養(yǎng)學(xué)生的系統(tǒng)設(shè)計(jì)和動(dòng)手能力,學(xué)會(huì)分析和編寫程序。課程設(shè)計(jì)的實(shí)施將使學(xué)生在以下幾個(gè)方面有所收獲: </p><p>  (1)加深對(duì)操作系統(tǒng)原理的理解,提高綜合運(yùn)用所學(xué)知識(shí)的能力; </p><p>  培養(yǎng)學(xué)生自主查閱參考資料的習(xí)

10、慣,增強(qiáng)獨(dú)立思考和解決問(wèn)題的能力;</p><p>  (3)通過(guò)課程設(shè)計(jì),培養(yǎng)嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和協(xié)作精神。</p><p><b>  1.2 實(shí)驗(yàn)概述</b></p><p>  1.2.1 實(shí)驗(yàn)名稱</p><p>  進(jìn)程的創(chuàng)建,獲取進(jìn)程的PID和操作系統(tǒng)的版本信息。</p><p>  1

11、.2.2 實(shí)驗(yàn)?zāi)康?lt;/p><p>  (1)通過(guò)編寫程序?qū)崿F(xiàn)進(jìn)程的創(chuàng)建,使用進(jìn)程和操作系統(tǒng)的版本信息,進(jìn)程的終止,使學(xué)生進(jìn)一步掌握進(jìn)程調(diào)度的概念,加深對(duì)處理機(jī)分配的理解。</p><p>  (2)了解Windows 2000/XP中進(jìn)程(線程)調(diào)度算法,掌握相應(yīng)的與調(diào)度相關(guān)的API函數(shù)。</p><p>  1.2.3 實(shí)驗(yàn)要求</p><p

12、>  (1)Windows 2000 Professional,Visual C++;</p><p>  (2)了解進(jìn)程的概念,并理解進(jìn)程的調(diào)度與訪問(wèn);</p><p>  (3)程序界面美觀。</p><p>  1.2.4 實(shí)驗(yàn)內(nèi)容</p><p>  在Windows XP,Windows 2000等操作系統(tǒng)下,語(yǔ)言不限,最好為

13、C或者C++,應(yīng)用API函數(shù),編寫進(jìn)程的創(chuàng)建,進(jìn)程使用,進(jìn)程終止操作。</p><p>  第二章API函數(shù)簡(jiǎn)介</p><p>  2.1 API的定義</p><p>  API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件的以訪問(wèn)一組例程的能力,而又無(wú)需

14、訪問(wèn)源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。</p><p>  2.2 windows API </p><p>  Windows API是一套用來(lái)控制Windows的各個(gè)部件的外觀和行為的預(yù)先定義的Windows函數(shù)。用戶的每個(gè)動(dòng)作都會(huì)引發(fā)一個(gè)或幾個(gè)函數(shù)的運(yùn)行以告訴Windows發(fā)生了什么。</p><p>  這在某種程度上很像Windows的天然代碼。而其他的語(yǔ)言

15、只是提供一種能自動(dòng)而且更容易的訪問(wèn)API的方法。當(dāng)你點(diǎn)擊窗體上的一個(gè)按鈕時(shí),Windows會(huì)發(fā)送一個(gè)消息給窗體,VB獲取這個(gè)調(diào)用并經(jīng)過(guò)分析后生成一個(gè)特定事件。</p><p>  API函數(shù)包含在Windows系統(tǒng)目錄下的動(dòng)態(tài)連接庫(kù)文件中。</p><p>  更易理解來(lái)說(shuō):Windows系統(tǒng)除了協(xié)調(diào)應(yīng)用程序的執(zhí)行、內(nèi)存的分配、系統(tǒng)資源的管理外,同時(shí)他也是一個(gè)很大的服務(wù)中心。調(diào)用這個(gè)服務(wù)中

16、心的各種服務(wù)(每一種服務(wù)就是一個(gè)函數(shù))可以幫助應(yīng)用程序達(dá)到開啟視窗、描繪圖形和使用周邊設(shè)備等目的,由于這些函數(shù)服務(wù)的對(duì)象是應(yīng)用程序,所以稱之為Application Programming Interface,簡(jiǎn)稱API 函數(shù)。WIN32 API也就是MicrosoftWindows 32位平臺(tái)的應(yīng)用程序編程接口。 </p><p>  2.3開放API函數(shù)</p><p>  基于互聯(lián)網(wǎng)

17、的應(yīng)用正變得越來(lái)越普及,在這個(gè)過(guò)程中,有更多的站點(diǎn)將自身的資源開放給開發(fā)者來(lái)調(diào)用。對(duì)外提供的API 調(diào)用使得站點(diǎn)之間的內(nèi)容關(guān)聯(lián)性更強(qiáng),同時(shí)這些開放的平臺(tái)也為用戶、開發(fā)者和中小網(wǎng)站帶來(lái)了更大的價(jià)值。  </p><p>  開放是目前的發(fā)展趨勢(shì),越來(lái)越多的產(chǎn)品走向開放。目前的網(wǎng)站不能靠限制用戶離開來(lái)留住用戶,開放的架構(gòu)反而更增加了用戶的粘性。在Web 2.0的浪潮到來(lái)之前,開放的API 甚至源代碼主要體現(xiàn)在桌面應(yīng)用

18、上,而現(xiàn)在越來(lái)越多的Web 應(yīng)用面向開發(fā)者開放了API。   </p><p>  具備分享、標(biāo)準(zhǔn)、去中心化、開放、模塊化的Web 2.0 站點(diǎn),在為使用者帶來(lái)價(jià)值的同時(shí),更希望通過(guò)開放的API 來(lái)讓站點(diǎn)提供的服務(wù)擁有更大的用戶群和服務(wù)訪問(wèn)數(shù)量。站點(diǎn)在推出基于開放API 標(biāo)準(zhǔn)的產(chǎn)品和服務(wù)后,無(wú)需花費(fèi)力氣做大量的市場(chǎng)推廣,只要提供的服務(wù)或應(yīng)用出色易于使用,其他站點(diǎn)就會(huì)主動(dòng)將開放API 提供的服務(wù)整合到自己的應(yīng)用之中

19、。同時(shí),這種整合API 帶來(lái)的服務(wù)應(yīng)用,也會(huì)激發(fā)更多富有創(chuàng)意的應(yīng)用產(chǎn)生。   </p><p>  為了對(duì)外提供統(tǒng)一的API 接口,需要對(duì)開發(fā)者開放資源調(diào)用API 的站點(diǎn)提供開放統(tǒng)一的API接口環(huán)境,來(lái)幫助使用者訪問(wèn)站點(diǎn)的功能和資源。   </p><p>  當(dāng)然,開放API 的站點(diǎn)為第三方的開發(fā)者提供良好的社區(qū)支持也是很有意義的,這有助于吸引更多的技術(shù)人員參與到開放的開發(fā)平臺(tái)中,并開發(fā)

20、出更為有趣的第三方應(yīng)用。視頻云技術(shù)提供商CC視頻開放API接口,用戶可以在自己的網(wǎng)站后臺(tái)輕松完成視頻的上傳、視頻播放控制操作,并可批量獲取視頻及平臺(tái)信息。</p><p>  第三章 相關(guān)API函數(shù)</p><p>  這個(gè)課程設(shè)計(jì)是基于API函數(shù)的,下面介紹在這個(gè)課程設(shè)計(jì)的過(guò)程中需要了解并理解的有關(guān)函數(shù)。</p><p>  3.1 CreateProcess()

21、</p><p><b>  定義:</b></p><p>  WIN32API函數(shù)CreateProcess用來(lái)創(chuàng)建一個(gè)新的進(jìn)程和它的主線程,這個(gè)新進(jìn)程運(yùn)行指定的可執(zhí)行文件。</p><p><b>  2)函數(shù)原型:</b></p><p>  BOOL CreateProcess   <

22、;/p><p> ?。? LPCTSTRlpApplicationName,   </p><p>  LPTSTRlpCommandLine,   </p><p>  LPSECURITY_ATTRIBUTESlpProcessAttributes,   LPSECURITY_ATTRIBUTESlpThreadAttributes,   </p>

23、<p>  BOOLbInheritHandles,   </p><p>  DWORDdwCreationFlags,   </p><p>  LPVOIDlpEnvironment,   </p><p>  LPCTSTRlpCurrentDirectory,   </p><p>  LPSTARTUPINFOlpSta

24、rtupInfo,   LPPROCESS_INFORMATIONlpProcessInformation   </p><p><b>  );</b></p><p><b>  3)函數(shù)參數(shù):</b></p><p> ?。?)lpApplicationName </p><p>  指向一個(gè)

25、NULL結(jié)尾的、用來(lái)指定可執(zhí)行模塊的字符串。這個(gè)字符串可以是可執(zhí)行模塊的絕對(duì)路徑,也可以是相對(duì)路徑,在后一種情況下,函數(shù)使用當(dāng)前驅(qū)動(dòng)器和目錄建立可執(zhí)行模塊的路徑。   </p><p>  這個(gè)參數(shù)可以被設(shè)為NULL,在這種情況下,可執(zhí)行模塊的名字必須處lpCommandLine 參數(shù)的最前面并由空格符與后面的字符分開。 </p><p>  (2)lpCommandLine  </

26、p><p>  指向一個(gè)以NULL結(jié)尾的字符串,該字符串指定要執(zhí)行的命令行。   </p><p>  這個(gè)參數(shù)可以為空,那么函數(shù)將使用lpApplicationName參數(shù)指定的字符串當(dāng)做要運(yùn)行的程序的命令行。如果lpApplicationName和lpCommandLine參數(shù)都不為空,那么lpApplicationName參數(shù)指定將要被運(yùn)行的模塊,lpCommandLine參數(shù)指定將被運(yùn)

27、行的模塊的命令行。新運(yùn)行的進(jìn)程可以使用GetCommandLine函數(shù)獲得整個(gè)命令行。C語(yǔ)言程序可以使用argc和argv參數(shù)。</p><p>  (3)lpProcessAttributes  </p><p>  指向一個(gè)SECURITY_ATTRIBUTES結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體決定是否返回的句柄可以被子進(jìn)程繼承。如果lpProcessAttributes參數(shù)為空(NULL),那么句柄

28、不能被繼承。   </p><p>  在Windows NT中:SECURITY_ATTRIBUTES結(jié)構(gòu)的lpSecurityDescriptor成員指定了新進(jìn)程的安全描述符,如果參數(shù)為空,新進(jìn)程使用默認(rèn)的安全描述符。在Windows95中:SECURITY_ATTRIBUTES結(jié)構(gòu)的lpSecurityDescriptor成員被忽略。   </p><p>  lpThreadAtt

29、ributes   </p><p>  指向一個(gè)SECURITY_ATTRIBUTES結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體決定是否返回的指向線程的句柄可以被子進(jìn)程繼承。如果lpThreadAttributes參數(shù)為空(NULL),那么句柄不能被繼承。   </p><p>  在Windows NT中,SECURITY_ATTRIBUTES結(jié)構(gòu)的lpSecurityDescriptor成員指定了主線程的安

30、全描述符,如果參數(shù)為空,主線程使用默認(rèn)的安全描述符。</p><p>  在Windows95中:SECURITY_ATTRIBUTES結(jié)構(gòu)的lpSecurityDescriptor成員被忽略。 </p><p>  bInheritHandles  </p><p>  指示新進(jìn)程是否從調(diào)用進(jìn)程處繼承了句柄。   </p><p>  如果

31、參數(shù)的值為真,調(diào)用進(jìn)程中的每一個(gè)可繼承的打開句柄都將被子進(jìn)程繼承。被繼承的句柄與原進(jìn)程擁有完全相同的值和訪問(wèn)權(quán)限。  </p><p>  dwCreationFlags   </p><p>  指定附加的、用來(lái)控制優(yōu)先類和進(jìn)程的創(chuàng)建的標(biāo)志。以下的創(chuàng)建標(biāo)志可以以除下面列出的方式外的任何方式組合后指定。 </p><p>  (7)lpEnvironment  &l

32、t;/p><p>  指向一個(gè)新進(jìn)程的環(huán)境塊。如果此參數(shù)為空,新進(jìn)程使用調(diào)用進(jìn)程的環(huán)境?!?lt;/p><p>  一個(gè)環(huán)境塊存在于一個(gè)由以NULL結(jié)尾的字符串組成的塊中,這個(gè)塊也是以NULL結(jié)尾的。每個(gè)字符串都是name=value的形式。因?yàn)橄嗟葮?biāo)志被當(dāng)做分隔符,所以它不能被環(huán)境變量當(dāng)做變量名。</p><p> ?。?)lpCurrentDirectory</p

33、><p>  指向一個(gè)以NULL結(jié)尾的字符串,這個(gè)字符串用來(lái)指定子進(jìn)程的工作路徑。這個(gè)字符串必須是一個(gè)包含驅(qū)動(dòng)器名的絕對(duì)路徑。如果這個(gè)參數(shù)為空,新進(jìn)程將使用與調(diào)用進(jìn)程相同的驅(qū)動(dòng)器和目錄。這個(gè)選項(xiàng)是一個(gè)需要啟動(dòng)應(yīng)用程序并指定它們的驅(qū)動(dòng)器和工作目錄的外殼程序的主要條件。   </p><p> ?。?)lpStartupInfo</p><p>  指向一個(gè)用于決定新進(jìn)程的

34、主窗體如何顯示的STARTUPINFO結(jié)構(gòu)體。  </p><p> ?。?0)lpProcessInformation</p><p>  指向一個(gè)用來(lái)接收新進(jìn)程的識(shí)別信息的PROCESS_INFORMATION結(jié)構(gòu)體。</p><p>  4)返回值:如果函數(shù)執(zhí)行成功,返回非零值。如果函數(shù)執(zhí)行失敗,返回零,可以使用GetLastError函數(shù)獲得錯(cuò)誤的附加信息。

35、 </p><p>  3.2 GetVersionEX()</p><p>  1)函數(shù)功能:GetVersionEx函數(shù)是獲得操作系統(tǒng)版本號(hào)信息的方法,它取代了GetVersion函數(shù)的功能。</p><p><b>  2)函數(shù)原型:</b></p><p>  BOOL GetVersionEx</p>

36、;<p> ?。?LPOSVERSIONINFO lpVersionInformation;//指向版本信息結(jié)構(gòu)體的指針);</p><p>  3)參數(shù)說(shuō)明:   </p><p>  lpVersionInformation :指向一個(gè)OSVERSIONINFO數(shù)據(jù)結(jié)構(gòu)的指針,用于填充操作系統(tǒng)版本信息。在調(diào)用GetVersionEx函數(shù)之前,先將OSVERSIONINFO

37、數(shù)據(jù)結(jié)構(gòu)的dwOSVersionInfoSize成員設(shè)置為為sizeof(OSVERSIONINFO)。 </p><p><b>  4)返回值:  </b></p><p>  如果函數(shù)成功,返回值為非零。如果函數(shù)失敗,返回值為零,為了獲得更多錯(cuò)誤信息,可調(diào)用GetLastError函數(shù)。如果給OSVERSIONINFO結(jié)構(gòu)體的dwOSVersionInfoSiz

38、e成員指定一個(gè)無(wú)效值,函數(shù)將失敗。 </p><p>  3.3 ReleaseMutex()</p><p>  1)定義:ReleaseMutex函數(shù)的功能是釋放互斥對(duì)象。一個(gè)線程釋放了互斥對(duì)象后,如果其他進(jìn)程在等待互斥對(duì)象置位,則等待的線程可以得到該互斥對(duì)象,等待函數(shù)返回,互斥對(duì)象被新的線程所擁有。</p><p><b>  2)函數(shù)原型:<

39、/b></p><p>  BOOL WIANPI ReleaseMutex</p><p><b>  (   </b></p><p>  HANDLE hMutex</p><p><b>  ); </b></p><p>  3)返回值:TRUE表示成功,F(xiàn)A

40、LSE表示失敗。 </p><p>  4)參數(shù)說(shuō)明:hMutex:HANDLE,制定一個(gè)互斥體的句柄。</p><p>  3.4 ExitProcess()</p><p>  1)定義:終止一個(gè)進(jìn)程</p><p>  2)VB聲明:Declare Sub ExitProcess Lib"kernel32" Alia

41、s "ExitProcess" (ByVal uExitCode As Long) </p><p>  3.5 GetexitCodeProcess()</p><p>  1)定義:獲取一個(gè)已中斷進(jìn)程的退出代碼  </p><p><b>  2)函數(shù)原型:</b></p><p>  BOOL

42、WINAPI GetExitCodeProcess</p><p><b>  (</b></p><p>  __in HANDLE hProcess,</p><p>  __out LPDWORD lpExitCode   </p><p><b>  ); </b></p>&

43、lt;p><b>  3)VC聲明:</b></p><p>  BOOL GetExitCodeProcess</p><p><b>  (</b></p><p>  HANDLE hProcess,</p><p>  LPDWORD lpExitCode </p>&l

44、t;p><b>  );</b></p><p>  4)參數(shù)說(shuō)明:hProcess Long,想獲取退出代碼的一個(gè)進(jìn)程的句柄   lpExitCode Long,用于裝載進(jìn)程退出代碼的一個(gè)長(zhǎng)整數(shù)變量。如進(jìn)程尚未中止,則設(shè)為常數(shù)STILL_ACTIVE</p><p>  5)返回值:Long,非零表示成功,零表示失敗。設(shè)置GetLastError  </

45、p><p>  3.6 STARTUPINFO結(jié)構(gòu)</p><p>  STARTUPINFO結(jié)構(gòu),用于指定新進(jìn)程的主窗口特性。</p><p><b>  1)結(jié)構(gòu)的定義:</b></p><p>  typedef struct _STARTUPINFO </p><p><b>  {

46、</b></p><p><b>  DWORD cb;</b></p><p>  DWORD dwX;</p><p>  DWORD dwY;</p><p>  DWORD dwXSize;</p><p>  DWORD dwYSize; </p><p&

47、gt;  DWORD dwXCountChars;</p><p>  DWORD dwYCountChars;   </p><p>  DWORD dwFillAttribute;   </p><p>  DWORD dwFlags;   </p><p>  WORD wShowWindow;   </p><p&

48、gt;  WORD cbReserved2;   </p><p>  LPBYTE lpReserved2;   </p><p>  HANDLE hStdInput;   </p><p>  HANDLE hStdOutput;   </p><p>  HANDLE hStdError;   </p><p>

49、;  } STARTUPINFO, *LPSTARTUPINFO;</p><p><b>  2)函數(shù)參數(shù)說(shuō)明:</b></p><p> ?。?)DWORD cb:包含STARTUPINFO結(jié)構(gòu)中的字節(jié)數(shù).如果Microsoft將來(lái)擴(kuò)展該結(jié)構(gòu),它可用作版本控制手段。應(yīng)用程序必須將cb初始化為sizeof(STARTUPINFO)   </p><

50、;p>  (2)PSTR lpReserved:保留,必須初始化為N U L L   </p><p>  (3)PSTR lpDesktop:用于標(biāo)識(shí)啟動(dòng)應(yīng)用程序所在的桌面的名字。如果該桌面存在,新進(jìn)程便與指定的桌面相關(guān)聯(lián)。如果桌面不存在,便創(chuàng)建一個(gè)帶有默認(rèn)屬性的桌面,并使用為新進(jìn)程指定的名字。如果lpDesktop是NULL(這是最常見的情況),那么該進(jìn)程將與當(dāng)前桌面相關(guān)聯(lián)?! ?lt;/p>

51、<p> ?。?)PSTR lpTitle:用于設(shè)定控制臺(tái)窗口的名稱。如果l p Ti t l e 是N U L L ,則可執(zhí)行文件的名字將用作窗口名   </p><p>  (5)DWORD dwX:用于設(shè)定應(yīng)用程序窗口在屏幕上應(yīng)該放置的位置的x 和y 坐標(biāo)(以像素為單位)。   </p><p> ?。?)DWORD dwY:只有當(dāng)子進(jìn)程用CW_USEDEFAULT作為Cr

52、eateWindow的x參數(shù)來(lái)創(chuàng)建它的第一個(gè)重疊窗口時(shí),才使用這兩個(gè)坐標(biāo)。若是創(chuàng)建控制臺(tái)窗口的應(yīng)用程序,這些成員用于指明控制臺(tái)窗口的左上角   </p><p> ?。?)WORD dwXSize和DWORD dwYSize:用于設(shè)定應(yīng)用程序窗口的寬度和長(zhǎng)度(以像素為位)</p><p>  (8)DWORD dwXCountChars:用于設(shè)定子應(yīng)用程序的控制臺(tái)窗口的寬度和高度(以字符為

53、單位)   </p><p>  (9)DWORD dwYCountChars和DWORD dwFillAttribute://用于設(shè)定子應(yīng)用程序的控制臺(tái)窗口使用的文本和背景顏色   </p><p> ?。?0)WORD wShowWindow:用于設(shè)定子應(yīng)用程序初次調(diào)用的S h o w Wi n do w 將S W _ S H O W D E FA U LT 作為n C m d S h

54、 o w 參數(shù)傳遞時(shí),該應(yīng)用程序的第一個(gè)重疊窗口應(yīng)該如何出現(xiàn)。  </p><p> ?。?1)WORD cbReserved2:保留。必須被初始化為0   </p><p> ?。?2)PBYTE lpReserved2:保留。必須被初始化為N U L L </p><p>  3.7 PROCESS_INFORMATION 結(jié)構(gòu)</p><p

55、>  在創(chuàng)建進(jìn)程時(shí)相關(guān)的數(shù)據(jù)結(jié)構(gòu)之一,該結(jié)構(gòu)返回有關(guān)新進(jìn)程及其主線程的信息。</p><p>  1)結(jié)構(gòu)定義如下:   </p><p>  typedef struct_PROCESS_INFORMATION</p><p><b>  {</b></p><p>  HANDLE hProcess;   &l

56、t;/p><p>  HANDLE hThread;</p><p>  DWORD dwProcessId;</p><p>  DWORD dwThreadId;</p><p>  }PROCESS_INFORMATION; </p><p><b>  2)成員函數(shù)說(shuō)明:</b></p&

57、gt;<p>  (1)hProcess:返回新進(jìn)程的句柄。   </p><p>  (2)hThread:返回主線程的句柄。   </p><p> ?。?)dwProcessId:返回一個(gè)全局進(jìn)程標(biāo)識(shí)符。該標(biāo)識(shí)符用于標(biāo)識(shí)一個(gè)進(jìn)程。從進(jìn)程被創(chuàng)建到終止,該值始終有效。   </p><p>  (4)dwThreadId:返回一個(gè)全局線程標(biāo)識(shí)符。該標(biāo)

58、識(shí)符用于標(biāo)識(shí)一個(gè)線程。從線程被創(chuàng)   建到終止,該值始終有效。</p><p>  3.8 GetStartupInfo</p><p><b>  函數(shù)功能:</b></p><p>  該函數(shù)返回進(jìn)程在啟動(dòng)時(shí)被指定的 STARTUPINFO 結(jié)構(gòu)。</p><p><b>  2)函數(shù)原型</b>

59、;</p><p>  VOID GetStartupInfo( LPSTARTUPINFO lpStartupInfo); </p><p><b>  3)參數(shù)說(shuō)明:</b></p><p>  lpStartupInfo :用來(lái)存放要獲取的 STARTUPINFO 結(jié)構(gòu)   </p><p>  4)返回值 :該函

60、數(shù)沒有返回值 </p><p>  3.9 ShowWindow</p><p>  1)函數(shù)功能:該函數(shù)設(shè)置指定窗口的顯示狀態(tài)。 </p><p>  2)函數(shù)原型:BOOL ShowWindow(HWND hWnd, int nCmdShow);</p><p>  3)返回值:如果窗口當(dāng)前可見,則返回值為非零。如果窗口當(dāng)前被隱藏,則返回

61、值為零。</p><p>  3.10 InternetGetConnectedState</p><p>  1)函數(shù)功能:用以返回本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)。</p><p><b>  2)函數(shù)原型:</b></p><p>  BOOL InternetGetConnectedState</p><

62、;p>  ( __out LPDWORD lpdwFlags, </p><p>  __in DWORD dwReserved,);</p><p><b>  函數(shù)參數(shù)說(shuō)明:</b></p><p>  lpdwFlags:指向一個(gè)變量,該變量接收連接描述內(nèi)容。該參數(shù)在函數(shù)返回FLASE時(shí)仍可以返回一個(gè)有效的標(biāo)記。</p>

63、<p><b>  返回值</b></p><p>  當(dāng)存在一個(gè)modem或一個(gè)LAN連接時(shí),返回TRUE,當(dāng)不存在internet連接或所有的連接當(dāng)前未被激活時(shí),返回false。</p><p><b>  實(shí)驗(yàn)結(jié)果與分析</b></p><p><b>  4.1 實(shí)驗(yàn)結(jié)果</b>

64、</p><p>  進(jìn)程的創(chuàng)建,創(chuàng)建的是在聯(lián)網(wǎng)和未聯(lián)網(wǎng)的狀態(tài)下分別調(diào)用IE瀏覽器的進(jìn)程。如下圖4.1和4.2所示,是在聯(lián)網(wǎng)情況下的運(yùn)行結(jié)果。</p><p>  調(diào)用InternetGetConnectedState()函數(shù),檢測(cè)到網(wǎng)絡(luò)已經(jīng)連接,輸出結(jié)果如下圖4.1所示:</p><p><b>  圖4.1 運(yùn)行結(jié)果</b></p&g

65、t;<p>  在聯(lián)網(wǎng)情況下,成功調(diào)用IE瀏覽器進(jìn)程,輸出結(jié)果如下圖4.2所示:</p><p><b>  圖4.2 運(yùn)行結(jié)果</b></p><p>  調(diào)用InternetGetConnectedState()函數(shù),檢測(cè)到網(wǎng)絡(luò)沒有連接,輸出結(jié)果如下圖4.2所示: </p><p><b>  圖4.3 運(yùn)行結(jié)果&

66、lt;/b></p><p>  在未聯(lián)網(wǎng)狀態(tài)下,網(wǎng)頁(yè)打不開,輸出結(jié)果如下圖4.2所示:</p><p><b>  圖4.4 運(yùn)行結(jié)果</b></p><p>  4.2 實(shí)驗(yàn)結(jié)果分析</p><p>  這次的課程設(shè)計(jì)做的是簡(jiǎn)單的“進(jìn)程的創(chuàng)建”,雖然簡(jiǎn)單,不如其他同學(xué)的難,但是在這期間也遇見了一些問(wèn)題。首先就是

67、老師為了讓我們多了解一些知識(shí),要求運(yùn)用API函數(shù),所以,在理解復(fù)雜的API函數(shù)過(guò)程中就出現(xiàn)了不能理解、不會(huì)自由靈活運(yùn)用的情況,在用API函數(shù)編程的過(guò)程中,由于對(duì)API知識(shí)的不熟悉,期間出了許多錯(cuò)誤,下面是在程序基本完成的時(shí)候出的錯(cuò)誤。</p><p>  在編譯的時(shí)候沒有出錯(cuò)(如圖5.1所示):</p><p>  圖5.1 編譯時(shí)的輸出</p><p>  但是在

68、組建的時(shí)候就會(huì)顯示如下信息(如圖5.2和5.3所示):</p><p>  圖5.2 組建時(shí)的輸出</p><p><b>  圖5.3 錯(cuò)誤顯示</b></p><p>  經(jīng)過(guò)請(qǐng)教其他同學(xué),在“工程 選項(xiàng)”中添加“wininet.lib”之后,就可以執(zhí)行了。這個(gè)問(wèn)題,我在網(wǎng)上查了,并沒有得到明確的說(shuō)法,所以,現(xiàn)在,我的理解就是,在連接過(guò)程中

69、出了一些問(wèn)題,加上的“wininet.lib”就相當(dāng)于頭文件之類的。</p><p>  圖5.4 進(jìn)行的修改</p><p>  這次課程設(shè)計(jì)讓我對(duì)編程有了另外的一些看法。我的動(dòng)手能力不強(qiáng),沒有自己編過(guò)什么程序,主要還是因?yàn)楦杏X上太難了,不敢動(dòng)手做,而現(xiàn)在,我覺得,只要自己動(dòng)手做了,慢慢的也就會(huì)了。</p><p><b>  結(jié)束語(yǔ)</b>

70、</p><p>  這次的課程設(shè)計(jì),在趙靜老師的指導(dǎo)與幫助下,通過(guò)查找資料,在實(shí)踐中對(duì)各種概念和基本知識(shí)有了進(jìn)一步的認(rèn)識(shí)與掌握。我做的課題是“進(jìn)程的創(chuàng)建”,主要用到了API函數(shù)和VC語(yǔ)言。這次課程設(shè)計(jì)不僅幫我重新溫習(xí)了VC,還讓我對(duì)API函數(shù)有了一些認(rèn)識(shí)和一定程度的理解。</p><p>  “千里之行,始于足下”,通過(guò)這次課程設(shè)計(jì),我對(duì)這句話的含義又有了更深一層的理解。我做的是一個(gè)再簡(jiǎn)

71、單不過(guò)的進(jìn)程的創(chuàng)建,可是,其中的每一個(gè)函數(shù)模塊,每一個(gè)函數(shù),甚至每一個(gè)函數(shù)變量,都需要仔細(xì)、認(rèn)真的考慮,只有把這些小事情都做好了,才能夠把整個(gè)程序?qū)懗鰜?lái)。</p><p>  還有一點(diǎn)就是,我也著實(shí)認(rèn)識(shí)到,將來(lái)走上社會(huì),動(dòng)手能力很關(guān)鍵。通過(guò)這次實(shí)踐訓(xùn)練,提高了我綜合運(yùn)用知識(shí)的能力和水平。</p><p>  在此特別感謝趙靜老師的指導(dǎo)與幫助。趙老師嚴(yán)謹(jǐn)細(xì)致、一絲不茍的工作作風(fēng)值得我在將來(lái)的

72、學(xué)習(xí)與工作中學(xué)習(xí)。</p><p><b>  參考文獻(xiàn)</b></p><p>  【1】范文慶、周彬彬、安靖等,Windows API-函數(shù)、借口、編程實(shí)例,人民郵電出版社,2009年</p><p>  【2】譚浩強(qiáng),C++程序設(shè)計(jì),清華大學(xué)出版社,2004年</p><p>  【3】郁紅英、李春強(qiáng),計(jì)算機(jī)操作系

73、統(tǒng)實(shí)驗(yàn)指導(dǎo),清華大學(xué)出版社,2008年</p><p><b>  附錄</b></p><p><b>  程序源代碼如下:</b></p><p>  #include<windows.h>//頭文件</p><p>  #include<Wininet.h></p

74、><p>  #include<iostream></p><p>  using namespace std;</p><p>  int main()</p><p><b>  {</b></p><p><b>  int i;</b></p>

75、<p>  STARTUPINFO si; //進(jìn)程啟動(dòng)時(shí)需要初始化的結(jié)構(gòu)</p><p>  PROCESS_INFORMATION pi; //進(jìn)程啟動(dòng)后的有關(guān)信息</p><p>  si.cb = sizeof(si);//設(shè)置結(jié)構(gòu)的大小,cb屬性應(yīng)為結(jié)構(gòu)的大小</p><p>  GetStartupInfo(&si); //檢查啟動(dòng)信息

76、</p><p>  si.wShowWindow = SW_SHOW;//這里設(shè)置窗口為顯示,SW_HIDE為隱藏窗口</p><p>  si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;</p><p>  i=CreateProcess(NULL,//lpApplicationName輸入?yún)?shù),

77、指向啟動(dòng)進(jìn)程的exe文件</p><p>  "C://Program Files//Internet Explorer//IEXPLORE.EXE",//lpCommandLine輸入?yún)?shù)啟</p><p><b>  動(dòng)進(jìn)程的命令行</b></p><p>  NULL,//指向SECURITY_ATTRIBUTES結(jié)構(gòu)

78、變量,為進(jìn)程的安全屬性,設(shè)置為NULL</p><p><b>  則表示默認(rèn)安全屬性</b></p><p>  NULL,//輸入?yún)?shù),進(jìn)程句柄是否可被子進(jìn)程繼承,設(shè)置為NULL,則不會(huì)繼承</p><p>  FALSE,//不繼承句柄</p><p>  NULL,//輸入?yún)?shù),指向心進(jìn)程的環(huán)境變量塊,設(shè)置為NU

79、LL,則使用父進(jìn)程的環(huán)境變</p><p><b>  量</b></p><p>  NULL,//輸入?yún)?shù),指向創(chuàng)建后心進(jìn)程的當(dāng)前目錄,設(shè)置為NULL,則為父進(jìn)程的</p><p><b>  當(dāng)前目錄</b></p><p>  NULL,//輸入?yún)?shù),進(jìn)程的創(chuàng)建標(biāo)志和優(yōu)先級(jí)控制</p&

80、gt;<p>  &si,//輸入?yún)?shù),指向STARTUPINFO數(shù)據(jù)結(jié)構(gòu)變量,設(shè)定啟動(dòng)信息</p><p>  &pi);//輸出參數(shù),指向PROCESS_INFORMATION 的結(jié)構(gòu)變量,返回被創(chuàng)建的進(jìn)程</p><p>  信息DWORD dwFlags=0;//判斷當(dāng)前網(wǎng)絡(luò)的連接狀態(tài)</p><p>  if(Internet

81、GetConnectedState(&dwFlags,0)&&i!=0)</p><p><b>  {</b></p><p>  cout<<"*******************************"<<endl;</p><p>  cout<<&qu

82、ot;當(dāng)前網(wǎng)絡(luò)已連接,請(qǐng)放心使用!"<<endl;</p><p>  cout<<"*******************************"<<endl;</p><p><b>  }</b></p><p><b>  else</b><

83、/p><p><b>  {</b></p><p>  cout<<"************************************"<<endl;</p><p>  cout<<"當(dāng)前網(wǎng)絡(luò)未連接,請(qǐng)檢查網(wǎng)絡(luò)連接情況!"<<endl;</p&

84、gt;<p>  cout<<"************************************"<<endl;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }<

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論