

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)模擬進(jìn)程課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程管理系統(tǒng)
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程控制課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì) (2)
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)_進(jìn)程調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度模擬設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論