版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第1頁,第三章 網(wǎng)絡(luò)安全編程基礎(chǔ),3.1 網(wǎng)絡(luò)安全編程概述 3.2 C語言發(fā)展的4個(gè)階段 3.3 網(wǎng)絡(luò)安全編程,第2頁,內(nèi)容提要,網(wǎng)絡(luò)安全編程主要涉及的是操作系統(tǒng)編程,在Windows平臺(tái)下,目前主要采用C/C+語言。 本章將介紹Windows操作系統(tǒng)的基本原理以及C語言的四個(gè)發(fā)展階段,每一階段都用典型的案例說明。 詳細(xì)說明在網(wǎng)絡(luò)安全領(lǐng)域如何使用C/C+語言實(shí)現(xiàn)Socket編程、注冊表編程、定時(shí)器編程、駐留程序編程和多線程編程。,第3頁,網(wǎng)絡(luò)安全編程概述,從理論上說,任何一門語言可以在任何一個(gè)操作系統(tǒng)上編程,C語言可以在Windows下編程,同樣也可以在Linux下編程。 編程是一項(xiàng)比較綜合的
2、工作,除了熟練使用編程工具以外,還要了解系統(tǒng)本身的內(nèi)部工作機(jī)理和編程語言。,第4頁,Windows內(nèi)部機(jī)制,Windows是一個(gè)“基于事件的,消息驅(qū)動(dòng)的”操作系統(tǒng)。在Windows下執(zhí)行一個(gè)程序,只要用戶進(jìn)行了影響窗口的動(dòng)作(如改變窗口大小或移動(dòng)、單擊鼠標(biāo)等)該動(dòng)作就會(huì)觸發(fā)一個(gè)相應(yīng)的“事件”。 系統(tǒng)每次檢測到一個(gè)事件時(shí),就會(huì)給程序發(fā)送一個(gè)“消息”,從而使程序可以處理該事件。 每次檢測到一個(gè)用戶事件,程序就對(duì)該事件做出響應(yīng),處理完以后,再等待下一個(gè)事件的發(fā)生。,第5頁,八個(gè)基本概念,與Windows系統(tǒng)密切相關(guān)的八個(gè)基本概念分別是: 窗口、程序、進(jìn)程、線程 消息、事件、句柄、API與SDK。,第
3、6頁,1、窗口,窗口是Windows本身以及Windows 環(huán)境下的應(yīng)用程序的基本界面單位,但是很多人都誤以為只有具有標(biāo)題欄、狀態(tài)欄、最大化、最小化按鈕這樣標(biāo)準(zhǔn)的方框才叫窗口。 其實(shí)窗口的概念很廣,例如按鈕和對(duì)話框等也是窗口哦,只不過是一種特殊的窗口罷了。,第7頁,2、程序,通常說的程序都是指一個(gè)能讓計(jì)算機(jī)識(shí)別的文件 接觸得最多的是以exe或者com作為擴(kuò)展名的文件。,第8頁,3、進(jìn)程,進(jìn)程就是應(yīng)用程序的執(zhí)行實(shí)例(或稱一個(gè)執(zhí)行程序),進(jìn)程是程序動(dòng)態(tài)的描述。 一個(gè)以exe作為擴(kuò)展名的文件,在沒有被執(zhí)行的時(shí)候稱之為應(yīng)用程序,當(dāng)用鼠標(biāo)雙擊執(zhí)行以后,就被操作系統(tǒng)作為一個(gè)進(jìn)程執(zhí)行了。 當(dāng)關(guān)機(jī)或者在任務(wù)欄
4、的圖標(biāo)上單擊鼠標(biāo)右鍵選“退出”時(shí),進(jìn)程便消亡,徹底結(jié)束了生命。 進(jìn)程經(jīng)歷了由“創(chuàng)建”到“消亡”的生命期,而程序自始至終存在于你的硬盤上,不管計(jì)算機(jī)是否啟動(dòng)。,第9頁,4、線程,線程是進(jìn)程的一個(gè)執(zhí)行單元,同一個(gè)進(jìn)程中的各個(gè)線程對(duì)應(yīng)于一組CPU指令、一組CPU寄存器以及一個(gè)堆棧。 進(jìn)程本來就具有動(dòng)態(tài)的含義,是通過線程來體現(xiàn)的。,第10頁,5、消息,消息是應(yīng)用程序和計(jì)算機(jī)交互的途徑,在計(jì)算機(jī)上幾乎做每一個(gè)動(dòng)作都會(huì)產(chǎn)生一個(gè)消息 鼠標(biāo)被移動(dòng)會(huì)產(chǎn)生WM_MOUSEMOVE消息,鼠標(biāo)左鍵被按下會(huì)產(chǎn)生WM_LBUTTONDOWN的消息,鼠標(biāo)右鍵按下便產(chǎn)生WM_RBUTTONDOWN消息等等。,第11頁,事件
5、句柄:,6、事件 從字面意思就可以明白它的含義,如在程序運(yùn)行的過程中改變窗口的大小或者移動(dòng)窗口等,都會(huì)觸發(fā)相應(yīng)的“事件”,從而調(diào)用相關(guān)的事件處理函數(shù)。 7、句柄: 單單一個(gè)“柄”字便可以解釋它的意思了,句柄是一個(gè)指針,通過句柄就可以控制該句柄指向的對(duì)象。編寫程序總是要和各種句柄打交道的,句柄是系統(tǒng)用來標(biāo)識(shí)不同對(duì)象類型的工具,如窗口、菜單等,這些東西在系統(tǒng)中被視為不同類型的對(duì)象,用不同的句柄將他們區(qū)分開來。,第12頁,8、API與SDK,API是英文Application Programming Interface 的縮寫,意思是“應(yīng)用程序接口”,泛指系統(tǒng)為應(yīng)用程序提供的一系列函數(shù)接口。 在編程
6、的時(shí)候可以直接調(diào)用,而不必知道其內(nèi)部實(shí)現(xiàn)的過程,只知道它的原型和返回值就可以了。 SDK是英文Software Development Kit的縮寫,意思是“軟件開發(fā)工具包”,微軟提供了許多專門的SDK開發(fā)包,比如DirectX開發(fā)包和語音識(shí)別開發(fā)包等等。,第13頁,學(xué)習(xí)Windows下編程,學(xué)習(xí)語言,選擇語言和工具是第一步,而且是非常重要的一步工作,目前的編程語言那么多,有C、C+、C#、Java和匯編語言等等。 雖然有很多語言,只要精通一門就夠了。從實(shí)用的角度來講,C/C+是最好的選擇,而微軟公司的Visual C+和Insprise公司(原Borland公司)的C+ Builder是其相
7、應(yīng)開發(fā)工具的兩大主流。,第14頁,開發(fā)工具,在開發(fā)工具上,選擇比較流行的VC+6.0,而且最好是英文版本,主界面如圖3-2所示。,第15頁,學(xué)習(xí)編程需要經(jīng)歷三大步,學(xué)習(xí)編程需要經(jīng)歷三大步:一、讀程序;二、寫程序;三、積累功能代碼段。 1、讀程序 在沒有閱讀過一份完整的源代碼之前,別指望能寫出有多好的程序!讀程序必須具備一定的語言基礎(chǔ)知識(shí),基礎(chǔ)知識(shí)主要是指語法知識(shí),最起碼要能讀懂程序的每一行意思。有沒有程序的設(shè)計(jì)思想,在這個(gè)時(shí)期并不重要,只要具備一定的語法基礎(chǔ)就可以了。 學(xué)一門語言并不需要刻意去記條條框框的語法,看代碼的時(shí)候,遇到了不明白的地方再去查相關(guān)的資料,補(bǔ)充基礎(chǔ)知識(shí)再配合源程序的思路,這
8、時(shí)的理解才是最深刻的。 2、寫程序 剛開始寫程序,不要奢望一下子寫出很出色的程序來,“萬丈高樓平底起”,編程貴在動(dòng)手,只要?jiǎng)邮秩懢涂梢粤?。此外,還要依照自身的能力循序漸進(jìn)地寫,開始的時(shí)候?qū)懸稽c(diǎn)功能簡單的、篇幅短小的代碼,力求簡潔、完整,然后在此基礎(chǔ)上進(jìn)行擴(kuò)充,一點(diǎn)點(diǎn)的添加功能。 3、積累功能代碼 積累非常的重要,將平時(shí)自己寫的和自己已經(jīng)讀通的程序分類保存起來,建一個(gè)屬于自己的代碼庫,需要相關(guān)功能的時(shí)候,就到代碼庫中找相關(guān)的代碼。這樣既提高編碼的效率又提高了正確率。,第16頁,選擇編程工具,目前流行兩大語法體系:Basic語系和C語系。同一個(gè)語系下語言的基本語法是一樣。兩大語系如圖3-3所示。
9、 C語系中,目前兩大語言如日中天:C+和Java。C+適宜做系統(tǒng)軟件的開發(fā)、Java更適宜做網(wǎng)絡(luò)應(yīng)用開發(fā)。 雖然VC+.NET已經(jīng)面世很久了,但是C+的開發(fā)工具目前主流依然是VC+6.0和C+ Builder6.0。 Java流行的開發(fā)工具比較多,比如:IBM公司的Visual Age和Websphere Studio,Insprise公司JBuilder等等。,第17頁,VC+6.0,VC+是基于C/C+的集成開發(fā)工具,目前最常用的版本是VC+6.0。VC+有一套集成開發(fā)工具,其中包括各種編輯器、編譯工具、集成調(diào)試器等等。在編寫程序的過程中,各種操作都可以通過單擊相應(yīng)的菜單完成。,第18頁,
10、新建的是一個(gè)控制臺(tái)程序,可以看到許多工程類型,這里新建的是一個(gè)控制臺(tái)程序,選擇“Win32 Console Application”,選擇工程存放的路徑,然后輸入工程名“proj3_1”,然后點(diǎn)擊按鈕“OK”。出現(xiàn)的界面如圖3-5所示。 在圖3-5的界面下選擇創(chuàng)建工程的模板,選擇空模板“An empty project”,點(diǎn)擊按鈕“Finish”,出現(xiàn)工程總結(jié)窗口,如圖3-6所示。,第19頁,編程工具的使用,案例名稱:編程工具的使用 程序名稱:proj3_1.cpp #include void main() cout Hello C+endl; ,第20頁,編程工具的使用,程序proj3_1.
11、cpp代碼包括三行 第一行:“#include ”意思是引入C+的基本輸入輸出函數(shù)庫,在C語言中引入的是“stdio.h”庫。在iostream.h文件中定義了cout的功能是輸出,endl的功能是回車換行。 第二行:“void main()”,main()函數(shù)是C/C+的主函數(shù),void表示該函數(shù)沒有返回值。 第四行:“cout Hello C+endl;”,“cout”功能是向屏幕輸出。,第21頁,C語言發(fā)展的四個(gè)階段,C語言經(jīng)過不斷的發(fā)展,在編程體系中可以將其分成四個(gè)階段。 1、面向過程的C語言。 2、面向?qū)ο蟮腃+語言。 3、SDK編程。 4、MFC編程(Microsoft Found
12、ation Class:微軟基類庫)。,第22頁,面向過程的C語言,C語言功能非常強(qiáng)大,Linux/Unix操作系統(tǒng)就是用C語言寫的, C語言直接調(diào)用操作系統(tǒng)提供的API函數(shù)可以編寫非常前大的程序。 C和C+的最主要區(qū)別是:C語言中沒有類的概念,C+在C的語法基礎(chǔ)上引入了類(Class),所以C+和C的語法是基本相同的。面向過程編程,最基本的程序用C語言編寫如proj3_2.cpp所示。 案例名稱:使用C語言編程 程序名稱:proj3_2.cpp #include main() printf(Hello DOSn); ,第23頁,案例3-1 讀取命令行參數(shù),main函數(shù)是程序的主函數(shù),程序執(zhí)行
13、的時(shí)候先從main函數(shù)開始。 該函數(shù)可以帶參數(shù),第一個(gè)參數(shù)是int型的,第二個(gè)參數(shù)是字符指針,具體使用方法如proj3_3.cpp所示。 案例名稱:讀取命令行參數(shù) 程序名稱:proj3_3.cpp #include int main(int argc, char *argv ) int i; for (i = 1; i argc; i+) printf(%sn, argvi); return 0; ,第24頁,面向?qū)ο蟮腃+語言,面向?qū)ο蟪绦蛟O(shè)計(jì)語言可以將一些變量和函數(shù)封裝到類(Class)中,當(dāng)變量被類封裝后,稱之為屬性或者數(shù)據(jù)成員,當(dāng)函數(shù)被類封裝后,稱之為方法或者成員函數(shù)。 定義好的一個(gè)類
14、,然后定義一個(gè)類的實(shí)例,這個(gè)實(shí)例就叫做對(duì)象,在C+中可以用類定義對(duì)象,使用方法如程序proj3_4.cpp所示。,第25頁,在C+中使用類,案例名稱:在C+中使用類 程序名稱:proj3_4.cpp #include class person public: int heart; char *name; int run()/定義成員函數(shù)run() heart=heart+20; return heart; ;,第26頁,void main() int iRunStop; person ZhangSan; ZhangS = 張三; ZhangSan.heart = 72; cout
15、姓名:ZhangS endl; cout跑步前心跳ZhangSan.heartendl; /run()為對(duì)象的方法 iRunStop = ZhangSan.run(); cout跑步后心跳iRunStopendl; ,第27頁,SDK編程,C庫提供了許多函數(shù),可以直接拿來使用。比如利用C庫提供的DeleteFile函數(shù)來刪除一個(gè)文件,如程序proj3_6.cpp所示。 案例名稱:調(diào)用C庫函數(shù) 程序名稱:proj3_6.cpp #include #include int main() DeleteFile(C:test.txt); printf(刪除成功n); return 0;
16、,第28頁,編寫窗口應(yīng)用程序,案例名稱:編寫對(duì)話框 程序名稱:proj3_7.cpp #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) MessageBox (NULL, TEXT (Hello, Windows!), TEXT (HelloMsg), MB_OK) ; return 0 ; ,第29頁,編寫窗口應(yīng)用程序,參數(shù)一:hInstance 是當(dāng)前實(shí)例的句柄。句柄是windows編程極其重要的概念。它是一個(gè)整數(shù),用于標(biāo)識(shí)程序、窗
17、口和資源等。在這里hInstance表示應(yīng)用程序本身。 參數(shù)二:hPrevInstance總是為NULL,在Windows早期版本中,當(dāng)多次同時(shí)運(yùn)行同一個(gè)程序時(shí),系統(tǒng)會(huì)創(chuàng)建該程序的多個(gè)“實(shí)例”,同一程序的所有實(shí)例共享代碼和內(nèi)存。程序需要檢查hPrevInstance來判斷自身的其他實(shí)例是否正在運(yùn)行,以便從已經(jīng)存在的實(shí)例中獲取數(shù)據(jù)。在32位版本中,統(tǒng)一程序運(yùn)行方式改變了,不在需要了! 參數(shù)三:lpCmdLine是運(yùn)行程序的命令行。用戶可以單擊”開始”菜單中的”運(yùn)行“選項(xiàng),然后輸入命令來運(yùn)行一個(gè)程序,并且可以指定運(yùn)行程序所需的參數(shù),這里的命令由lpCmdLine傳入。 參數(shù)四:nCmdShow用于
18、指定程序窗口最初的顯示模式,可以正常顯示,也可以在初始化就最大化或者最小化。,第30頁,利用SDK函數(shù)創(chuàng)建窗口,#include WNDCLASS wc; HWND h_wnd; MSG msg; /* 消息處理函數(shù)wndProc的聲明*/ long WINAPI WindowProc(HWND,UINT,WPARAM,LPARAM); /* winMain 函數(shù)的聲明*/ int PASCAL WinMain(HINSTANCE h_CurInstance,HINSTANCE h_PrevInstance,LPSTR p_CmdLine,int m_Show) /*初始化wndclass結(jié)構(gòu)
19、變量*/ wc.lpfnWndProc =WindowProc; wc.hInstance =h_CurInstance; wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName =TheMainClass;,第31頁,/* 注冊WndClass結(jié)構(gòu)變量*/ RegisterClass( ,第32頁,MFC編程,SDK的功能非常強(qiáng)大,需要記很多的函數(shù),當(dāng)面向?qū)ο缶幊坛蔀橹髁鞯臅r(shí)候,微軟將SDK的函數(shù)分類進(jìn)行封裝,這樣就誕生了MFC(Microsoft Foundation Class)。 MFC程序的最基本
20、的程序骨架如proj3_9.cpp所示。,第33頁,MFC編程,#include class sample:public CFrameWnd public: sample() /構(gòu)造函數(shù) Create(NULL,My Window); MessageBox(My Window,CFrame constructor); ; class App:public CWinApp public: BOOL InitInstance(); BOOL ExitInstance(); ;,第34頁,/InitInstance函數(shù)的定義/ BOOL App :InitInstance() MessageBox(
21、0,My Window,InitInstance, MB_OK|MB_ICONASTERISK); sample *obj; obj=new sample; m_pMainWnd=obj; obj-ShowWindow(SW_SHOWMAXIMIZED); return TRUE; /ExitInstance函數(shù)定義 BOOL App:ExitInstance() MessageBox(0,My Window,ExitInstance, MB_OK|MB_ICONHAND); return TRUE; /創(chuàng)建應(yīng)用程序?qū)ο?App appobject;,第35頁,網(wǎng)絡(luò)安全編程,網(wǎng)絡(luò)安全基礎(chǔ)編程技
22、術(shù)主要包括6個(gè)方面: Socket編程 注冊表編程 文件系統(tǒng)編程 定時(shí)器編程 駐留程序編程 多線程編程。,第36頁,Socket編程,談網(wǎng)絡(luò)安全編程離開網(wǎng)絡(luò)編程就會(huì)大失其味,凡是基于網(wǎng)絡(luò)應(yīng)用的程序都離不開Socket。 Socket的意思是套接字,是計(jì)算機(jī)與計(jì)算機(jī)之間通信的接口。 使用Winsock提供的API函數(shù)是最基本的網(wǎng)絡(luò)編程技術(shù),程序proj3_11.cpp利用Socket獲得本機(jī)的IP地址和機(jī)器名。,第37頁,Socket編程,案例名稱:使用Socket得到IP地址 程序名稱:proj3_11.cpp #include #include void CheckIP(void) /Che
23、ckIP函數(shù),用于獲取本機(jī)IP地址 WORD wVersionRequested;/WORD類型變量,用于存放Winsock版本的值 WSADATA wsaData; char name255;/用于存放主機(jī)名 PHOSTENT hostinfo; wVersionRequested = MAKEWORD( 2, 0 ); /調(diào)用MAKEWORD()函數(shù)獲得Winsock的版本,用于加載Winsock庫 int main() CheckIP();/調(diào)用CheckIP()函數(shù)獲得并輸出IP地址 return 0; ,第38頁,if ( WSAStartup( wVersionRequested,
24、 /卸載Winsock庫,并釋放所有資源 ,第39頁,注冊表編程,注冊表在計(jì)算機(jī)中由鍵名和鍵值組成,注冊表中存儲(chǔ)了Window操作系統(tǒng)的所有配置。黑客90%以上對(duì)Windows的攻擊手段都離不開讀寫注冊表。 在運(yùn)行窗口中輸入“regedit”命令可以進(jìn)入注冊表,注冊表的界面如圖3-37所示。,第40頁,注冊表編程,注冊表的句柄可以由調(diào)用RegOpenKeyEx()和RegCreateKeyEx()函數(shù)得到的,通過函數(shù)RegQueryValueEx()可以查詢注冊表某一項(xiàng)的值 通過函數(shù)RegSetValueEx()可以設(shè)置注冊表某一項(xiàng)的值。RegCreateKeyEx()函數(shù)和RegSetVal
25、ueEx()函數(shù)的使用方法如程序proj3_12.cpp所示。,第41頁,操作注冊表,#include #include main() HKEY hKey1; DWORD dwDisposition; LONG lRetCode; /創(chuàng)建 lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftWindows NTCurrentVersionIniFileMappingWebSecurity, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, ,第42頁,/設(shè)置第一個(gè)鍵
26、值 lRetCode = RegSetValueEx ( hKey1, Hack_Name, 0, REG_SZ, (byte*)sixage, 100); /設(shè)置第二個(gè)鍵值 lRetCode = RegSetValueEx ( hKey1, Hack_Hobby, 0, REG_SZ, (byte*)Running, 100); /如果創(chuàng)建失敗,顯示出錯(cuò)信息 if (lRetCode != ERROR_SUCCESS) printf ( Error in setting Section1 valuen); return (0) ; printf(注冊表編寫成功!n); return(0);
27、,第43頁,判斷是否中了“冰河”,中了“冰河”的計(jì)算機(jī)注冊表都將被修改了,修改了擴(kuò)展名為txt的文件的打開方式,在注冊表中txt文件的打開方式定義在HKEY_CLASSES_ROOT主鍵下的“txtfileshellopencommand”中,如圖3-40所示。,第44頁,案例3-6 更改登錄用戶名,當(dāng)用戶登錄系統(tǒng)以后,注冊表中就會(huì)自動(dòng)記下用戶名,下次登錄時(shí)再把登錄名顯示出來,如圖3-42所示。,第45頁,案例3-6 更改登錄用戶名,當(dāng)非法入侵計(jì)算機(jī)以后,同樣會(huì)留下非法登錄的用戶名,所以需要將用戶名修改會(huì)原來的值。 該用戶名記錄在注冊表的HKEY_LOCAL_MACHINE主鍵下的SOFTWA
28、REMicrosoftWindows NTCurrentVersionWinlogon子鍵中,鍵的名稱是:DefaultUserName,如圖3-43所示。,第46頁,更改系統(tǒng)登錄用戶,案例名稱:更改系統(tǒng)登錄用戶 程序名稱:proj3_14.cpp #include #include main() HKEY hKey1; LONG lRetCode; lRetCode = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon, 0, KEY_WRITE, ,第47頁,lRetCo
29、de = RegSetValueEx ( hKey1, DefaultUserName, 0, REG_SZ, (byte*)Hacker_sixage, 20); if (lRetCode != ERROR_SUCCESS) printf ( Error in setting Section1 valuen); return (0) ; printf(已經(jīng)將登錄名該成Hacker_sixage); return(0); ,第48頁,文件系統(tǒng)編程,文件系統(tǒng)編程非常的重要,可以在DOS命令行下執(zhí)行的操作都可以使用程序?qū)崿F(xiàn)。 在DOS命令行下使用命令“net user Hacker /add”添加
30、一個(gè)用戶,同樣可以在程序中實(shí)現(xiàn),如程序proj3_15.cpp所示。 案例名稱:添加系統(tǒng)用戶 程序名稱:proj3_15.cpp,第49頁,#include #include main() char * szCMD = net user Hacker /add; BOOL bSuccess; PROCESS_INFORMATION piProcInfo; STARTUPINFO Info; Info.cb=sizeof(STARTUPINFO); Info.lpReserved=NULL; Info.lpDesktop=NULL; Info.lpTitle=NULL; Info.cbReser
31、ved2=0; Info.lpReserved2=NULL; bSuccess=CreateProcess(NULL,szCMD,NULL,NULL,false,NULL,NULL,NULL, ,第50頁,文件拷貝和移動(dòng),案例名稱:文件拷貝和移動(dòng) 程序名稱:proj3_16.cpp #include #include main() CopyFile(C:File1.txt,C:File2.txt,TRUE); MoveFile(C:File1.txt,C:File3.txt); return 1; ,第51頁,系統(tǒng)時(shí)間,案例名稱:系統(tǒng)時(shí)間 程序名稱:proj3_17.cpp #include
32、#include main() SYSTEMTIME sysTime; GetLocalTime( ,第52頁,定時(shí)器編程,著名的“CIH病毒”每年定時(shí)發(fā)作,其中需要利用定時(shí)器來控制程序的執(zhí)行。定時(shí)器程序分成兩大類, 一類是循環(huán)執(zhí)行 另一類是根據(jù)條件只執(zhí)行一次。在程序中加載定時(shí)器,如程序proj3_18所示。,第53頁,定時(shí)器編程,案例名稱:定時(shí)器編程 程序名稱:proj3_18.cpp #include WNDCLASS wc; HWND h_wnd; MSG msg; /* 消息處理函數(shù)wndProc的聲明*/ long WINAPI WindowProc(HWND,UINT,WPARAM
33、,LPARAM); /* winMain 函數(shù)的聲明*/ int PASCAL WinMain(HINSTANCE h_CurInstance, HINSTANCE h_PrevInstance,LPSTR,第54頁,p_CmdLine,int m_Show) /*初始化wndclass結(jié)構(gòu)變量*/ wc.lpfnWndProc =WindowProc; wc.hInstance =h_CurInstance; wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName =TheMainClass; /* 注冊
34、WndClass結(jié)構(gòu)變量*/ RegisterClass( #define ID_TIMER 1,第55頁,定時(shí)器編程,/* 定義消息處理函數(shù)*/ long WINAPI WindowProc(HWND h_wnd,UINT WinMsg, WPARAM w_param,LPARAM l_param) static BOOL fFlipFlop = FALSE ; HBRUSH hBrush ; HDC hdc ; PAINTSTRUCT ps ; RECT rc ; switch (WinMsg) case WM_CREATE: SetTimer (h_wnd, ID_TIMER, 1000
35、, NULL) ; return 0 ; case WM_TIMER : MessageBeep (-1) ; fFlipFlop = !fFlipFlop ; InvalidateRect (h_wnd, NULL, FALSE) ; return 0 ;,第56頁,case WM_PAINT : hdc = BeginPaint (h_wnd, ,第57頁,案例3-7 “冰河”原型,第一種方法實(shí)現(xiàn)起來比較簡單,注冊表的自啟動(dòng)項(xiàng)的鍵值在“HKEY_LOCAL_MACHINE”主鍵下的“SOFTWAREMicrosoftWindowsCurrentVersion Run”子鍵中,如圖3-51所示。,第58頁,多線程編程,用多線程技術(shù)編程有兩大優(yōu)點(diǎn): 1、提高CPU的利用率。由于多線程并發(fā)運(yùn)行,用戶在做一件事情的時(shí)候還可以做另外一件事。特別是在多個(gè)CPU的情況下,更可以充分地利用硬件資源的優(yōu)勢,將一個(gè)大任務(wù)分成幾個(gè)任務(wù),由不同的CPU來合作完成。 2、采用多線程技術(shù),可以設(shè)置每個(gè)線程的優(yōu)先級(jí),調(diào)整工作的進(jìn)度。 在實(shí)際開發(fā)過程中,一定要有一個(gè)主進(jìn)程,其他線程可以共享該進(jìn)程也
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (完整版)生理學(xué)試題及答案400題
- 郵政招聘考試真題及答案
- vivo秋招試題及答案
- 單體電壓技師考試題庫及答案
- 車子駕駛證考試題庫及答案
- 中共臺(tái)州市路橋區(qū)委全面深化改革委員會(huì)辦公室關(guān)于公開選聘工作人員1人參考題庫必考題
- 中國金融出版社有限公司2026校園招聘4人考試備考題庫附答案
- 公主嶺市公安局2025年招聘警務(wù)輔助人員(150人)考試備考題庫必考題
- 南充市司法局2025年下半年公開遴選公務(wù)員(參公人員)公 告(2人)備考題庫必考題
- 吉水縣園區(qū)開發(fā)建設(shè)有限公司及下屬子公司2026年第一批面向社會(huì)公開招聘備考題庫附答案
- 2026年浙江高考語文真題試卷+答案
- 2025 年大學(xué)人工智能(AI 應(yīng)用)期中測試卷
- 《市場營銷(第四版)》中職完整全套教學(xué)課件
- (正式版)DB61∕T 2121-2025 《風(fēng)力發(fā)電場集電線路設(shè)計(jì)規(guī)范》
- 疑難病例討論制度落實(shí)常見問題與改進(jìn)建議
- 創(chuàng)傷性脾破裂的護(hù)理
- 蓬深102井鉆井工程(重新報(bào)批)項(xiàng)目環(huán)境影響報(bào)告表
- 大模型金融領(lǐng)域可信應(yīng)用參考框架
- (新教材)2025年人教版七年級(jí)上冊歷史期末復(fù)習(xí)??贾R(shí)點(diǎn)梳理復(fù)習(xí)提綱(教師版)
- 中國全色盲診療專家共識(shí)2026
- 中國地質(zhì)大學(xué)武漢本科畢業(yè)論文格式
評(píng)論
0/150
提交評(píng)論