破解教程入門篇3—Windows程序參考模板_第1頁(yè)
破解教程入門篇3—Windows程序參考模板_第2頁(yè)
破解教程入門篇3—Windows程序參考模板_第3頁(yè)
破解教程入門篇3—Windows程序參考模板_第4頁(yè)
破解教程入門篇3—Windows程序參考模板_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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、第三章Windows程序 這一章我都不知道該如何寫了,呵呵 畢竟,Win32是一個(gè)非常深?yuàn)W的系統(tǒng),目前還容不得我這種小輩在這兒說(shuō)三道四,不過(guò),我既然是要寫給那些入門階段的朋友們看的,又不是寫給那些搞程序設(shè)計(jì)老鳥看的,所以,我也犯不著怕被人背后指著罵 本章的名字就叫Windows程序而不是Windows程序設(shè)計(jì)所以,我只是講一些關(guān)于Windows程序運(yùn)作的原理: Windows為什么叫Windows,相信所有用過(guò)的朋友都可以明白,那桌面上一個(gè)一個(gè)的窗口,就是它名字的由來(lái)。也就是這一個(gè)又一個(gè)窗口的出現(xiàn),使計(jì)算機(jī)的使用一下子簡(jiǎn)單了巨多。幾年前接觸過(guò)電腦的朋友一定知道DOS吧,不知道的話,去問(wèn)加解密工

2、具下載版的版主老哥,讓他跟你解釋 你還記的DOS下那黑乎乎的窗口吧,沒(méi)見(jiàn)過(guò)的哥們兒可以在開始菜單中找出來(lái)看看。DOS通過(guò)一系列的命令來(lái)進(jìn)行相應(yīng)的操作,如進(jìn)入一個(gè)目錄,刪除一個(gè)目錄等等等等。那種工作方式就叫做命令提示符方式,也即命令行。 現(xiàn)在國(guó)內(nèi)不懂電腦的人還老愛(ài)說(shuō)要想學(xué)電腦,必須要英語(yǔ)過(guò)關(guān)。(就是這個(gè),嚇跑了多少僅僅是想學(xué)習(xí)一些基本操作的朋友)可能也就是源自DOS的原因吧。 后來(lái),隨著硬件的支持以及技術(shù)上的提高,當(dāng)然還有為了使電腦更方便的服務(wù)與人,慢慢的就有了所謂的視圖操作系統(tǒng),從此,你不用再記憶那些大堆的指令了,而且操作上,也有了相大的提高,可以說(shuō)操作系統(tǒng)發(fā)展到今天的份兒上,操作已經(jīng)夠簡(jiǎn)單了

3、,去看看那些在網(wǎng)吧里一把鼻涕的小孩子們吧 2 / 10當(dāng)然,就像當(dāng)年DOS之于命令提示行一樣,今天的Windows仍和當(dāng)年一樣,占據(jù)著大部分的用戶群。 (場(chǎng)外:一觀眾扔來(lái)一爛柿餅,你是唐僧啊,這么多廢話) 馬上轉(zhuǎn)入正題,Windows之所以好用,除了不用背N多的命令外,一個(gè)原因就是因?yàn)樗旧硖峁┝舜罅康臉?biāo)準(zhǔn)Windows GUI函數(shù)。所以對(duì)于用戶,面對(duì)的是同一套標(biāo)準(zhǔn)的窗口,對(duì)這些窗口的操作都是一樣的,所以使用不同的應(yīng)用程序時(shí)無(wú)須重新學(xué)習(xí)操作。不用像當(dāng)年在DOS下面那樣一安裝新程序,就要馬上看幫助,看說(shuō)明。 而Windows GUI函數(shù),只不過(guò)是微軟提供給程序開發(fā)人員的API(Applicati

4、on Programming Interface 應(yīng)用編程接口)中的一小部分而以。Windows API是一大組功能強(qiáng)大的函數(shù),它們本身駐扎在 Windows 中供人們隨時(shí)調(diào)用。這些函數(shù)的大部分被包含在幾個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL)中,譬如:kernel32.dll、 user32.dll 和 gdi32.dll。 Kernel32.dll中的函數(shù)主要處理內(nèi)存管理和進(jìn)程調(diào)度;user32.dll中的函數(shù)主要控制用戶界面;gdi32.dll中的函數(shù)則負(fù)責(zé)圖形方面的操作等等。 你可能多多少少聽(tīng)說(shuō)過(guò)API函數(shù),如果你不太清楚到底是怎么一回事的話,我盡量給你解釋的清楚一點(diǎn)。 不知道你有沒(méi)有想過(guò),Window

5、s中的那一個(gè)又一個(gè)窗口是怎么畫出來(lái)的呢?呵呵,你可能用VB、Delphi編過(guò)程序,你有沒(méi)有想過(guò)你寫的程序中的那些窗口是怎么形成的?是控件變成的。倒.呵呵,相信你當(dāng)初學(xué)VB或Delphi的時(shí)候,所看的書上一定對(duì)可視化編程環(huán)境大肆贊揚(yáng)了一番吧,是不是也提到過(guò)比VC+怎么怎么方便?怎么怎么不用再為生成程序的界面而花費(fèi)大量無(wú)用時(shí)間了等等。 (臺(tái)下上來(lái)一東北民工:小子,你找抽啊,還講不講了) 馬上開說(shuō),其實(shí)我只是想告訴你,所有你用的Windows下的程序,都是通過(guò)調(diào)用一個(gè)又一個(gè)的Windows API來(lái)執(zhí)行相應(yīng)任務(wù)的,沒(méi)有API,你的程序什么也做不了。用VB、Delphi以及MFC的朋友也許會(huì)說(shuō)我根本沒(méi)

6、有調(diào)用什么API??!其實(shí)這些API都是由你所用的開發(fā)環(huán)境自動(dòng)進(jìn)行相應(yīng)的轉(zhuǎn)換的。比如說(shuō)你用Delphi新建一程序,什么也不用動(dòng)就直接按F9來(lái)運(yùn)行它,是不是出現(xiàn)一個(gè)空白的窗體?這就是個(gè)標(biāo)準(zhǔn)的Windows程序,它有Windows程序所具有的一切特征,如最大化按鈕、最小化按鈕、關(guān)閉按鈕你可以通過(guò)鼠標(biāo)來(lái)移動(dòng)它。 但是如果你想用VC+或MASM32來(lái)寫這樣一個(gè)程序,那么你有兩種方法,在VC+中,你可以用MFC或直接調(diào)用API,而在MASM32中,你就只有直接調(diào)用API這一種方法。所謂直接調(diào)用API,就是指所有的操作都通過(guò)最原始的API來(lái)完成。通過(guò)直接調(diào)用API來(lái)生成這樣一個(gè)程序,你必須要先注冊(cè)窗口類(除

7、非您使用 Windows 預(yù)定義的窗口類,如 MessageBox 或 dialog box);然后產(chǎn)生窗口;然后在桌面顯示窗口(除非您不想立即顯示它); 然后刷新窗口客戶區(qū); 麻煩吧,如果你想真正的讓這個(gè)程序能正常地運(yùn)行下來(lái),還要再加入以下步驟: 1.你要得到您應(yīng)用程序的句柄。2.窗體顯示后就進(jìn)入無(wú)限的獲取窗口消息的循環(huán)。3. 如果有消息到達(dá),由負(fù)責(zé)該窗口的窗口回調(diào)函數(shù)處理。4. 如果用戶關(guān)閉窗口,進(jìn)行退出處理。 上面這此步驟,都需要調(diào)用相應(yīng)的API來(lái)完成。比如說(shuō)得到程序的句柄用GetModuleHandle注冊(cè)窗口類用RegisterClass或RegisterClassEx;注冊(cè)后,還要

8、用CreateWindowEx函數(shù)來(lái)生成相應(yīng)窗口,而后用ShowWindow來(lái)顯示它,之后還會(huì)用UpdateWindow 來(lái)更新客戶區(qū)等等等等。這些還都不算呢,如果你真通過(guò)直接調(diào)用API去寫一個(gè)稍大一點(diǎn)兒的程序的話,你會(huì)發(fā)現(xiàn)那是一個(gè)多么不令人愉快的事情。 上面說(shuō)的這些,只不過(guò)是API中的一小小小小小小小小小小.部分,這才幾個(gè),真正的API有成百上千個(gè),包括對(duì)系統(tǒng)各個(gè)方面進(jìn)行的操作。沒(méi)有API,你的程序什么也干不了。比如說(shuō)你的程序中有一個(gè)Edit控件,VB中應(yīng)該叫做Text控件吧,你想將用戶輸入到里面的信息放到一個(gè)變量中去,那么Delphi中可以用Str:=Edit1.text來(lái)實(shí)現(xiàn)。VB中應(yīng)該

9、是Str=Text1.Text;但是如果你用API,想要得到Edit輸入框里的文本內(nèi)容,就要調(diào)用GetDlgItemInt(Edit中輸入的值當(dāng)做數(shù)值來(lái)用)GetDlgItemText、GetDlgItemTextA(Edit中輸入的值當(dāng)做字符串來(lái)用)。而上面我說(shuō)的VB、Delphi得到編輯框中輸入的內(nèi)容的方法,最終在編譯成可執(zhí)行文件的時(shí)候,也會(huì)由編譯器自動(dòng)對(duì)其進(jìn)行相應(yīng)的轉(zhuǎn)換。你只要明白一件事就好了,那就是你所用的程序,無(wú)時(shí)無(wú)刻都在調(diào)用著系統(tǒng)中的各種各樣的API函數(shù)。 其實(shí)Windows中的API,就相當(dāng)于當(dāng)年DOS系統(tǒng)中的系統(tǒng)功能調(diào)用,及中斷21。只不過(guò)在數(shù)量上和功能上,都是DOS系統(tǒng)功能調(diào)

10、用所不及的。 如果你還是看不明白,那我不怪你,可能是我講的不清楚,所以,還是給你推薦老牛寫的書吧。力推Windows程序設(shè)計(jì),看過(guò)之后你會(huì)內(nèi)力大增的,那時(shí)候你所知道的知識(shí)就不止是API而以了。 其實(shí)話說(shuō)回來(lái),我這篇文章不是教你編程的,所以關(guān)于Windows程序的原理,沒(méi)有必要說(shuō)那么多,我之所以跟你講API,是想讓你知道Windows程序的運(yùn)行機(jī)制。免的到時(shí)候用調(diào)試器下斷點(diǎn)的時(shí)候問(wèn)什么是API。(眾人(十分憤怒地)沖上臺(tái)來(lái):“拉下去PK!把我們當(dāng)什么了!”) (我再次來(lái)到臺(tái)上,鏡頭切向臉的一側(cè),來(lái)個(gè)特寫。只見(jiàn)上面有若干處大小不同的傷口)可能還有些重點(diǎn)的地方我沒(méi)有提到,歡迎指正。如果你有什么不明白

11、的地方,歡迎跟貼提問(wèn)。只要?jiǎng)e太那個(gè),比如說(shuō)“你能把所有的API給我列出來(lái)讓我回去背背好嗎?” 附上幾個(gè)常用的API函數(shù)吧。相信你此時(shí)因該以經(jīng)對(duì)API有個(gè)大概的了解了。 MessageBox 顯示一信息對(duì)話框 MessageBoxEx 顯示一信息對(duì)話框 MessageBoxIndirect 顯示一定制信息對(duì)話框 (以上這三個(gè),可以用來(lái)中斷那些錯(cuò)誤提示,比如說(shuō)你注冊(cè)碼輸入錯(cuò)誤了,程序就可能通過(guò)這幾個(gè)函數(shù)中的一個(gè),來(lái)提示你錯(cuò)誤) GetDlgItemInt 得指定輸入框整數(shù)值 GetDlgItemText 得指定輸入框輸入字符串 GetDlgItemTextA 得指定輸入框輸入字符串 (軟件可以用這

12、三個(gè)來(lái)得到用戶輸入的注冊(cè)碼) GetLocalTime 得當(dāng)前本地時(shí)間 GetSystemTime 得當(dāng)前系統(tǒng)時(shí)間 (軟件可以用這兩個(gè)來(lái)判斷軟件是否過(guò)期) RegQueryvalueA 獲取一個(gè)項(xiàng)的設(shè)置值 RegQueryvalueExA 獲取一個(gè)項(xiàng)的設(shè)置值 RegSetvalueA 設(shè)置指定項(xiàng)或子項(xiàng)的值 RegSetvalueExA 設(shè)置指定項(xiàng)的值 (如果軟件用注冊(cè)表存儲(chǔ)注冊(cè)信息的話,那么這幾個(gè)也許會(huì)有用) 上面講的,只是幾個(gè)平時(shí)比較常見(jiàn)的,更多請(qǐng)參見(jiàn)看雪以前的教程或Windows開發(fā)人員手冊(cè)。 最后,我們還要隆重介紹一個(gè)重量級(jí)函數(shù),你可能不知道API是什么,但你只要用過(guò)調(diào)試器,就一定知道它的名字。你可以不知道美國(guó)現(xiàn)任的總統(tǒng)是誰(shuí),但是你一定要知道這個(gè)函數(shù)。我雖然知道現(xiàn)任美國(guó)總統(tǒng)是鮑威爾 但我同時(shí)也知道這個(gè)函數(shù)是誰(shuí)。 它就是-吳孟達(dá)?。▽?dǎo)演:NG)重新說(shuō)。它就是hmemcpy。 這個(gè)函數(shù)是干什么的? 它是一個(gè)非常簡(jiǎn)單的函數(shù)。只完成一項(xiàng)非常非?;镜娜蝿?wù),就是把數(shù)據(jù)從一個(gè)地方復(fù)制到另一個(gè)地方。應(yīng)用程序本身并不調(diào)用它,理由很簡(jiǎn)單,它很低級(jí)(匯編:誰(shuí)敢說(shuō)跟我一樣?)。但是大部分API函數(shù)卻非常頻繁地調(diào)用它。所以,它也叫萬(wàn)能函數(shù)。平時(shí)你可能都不知道有這么個(gè)東西,但是斷起程序來(lái)卻非常管用。但目前到了2K跟Xp下,卻沒(méi)有這個(gè)函數(shù)了,與之相應(yīng)的是一個(gè)叫memcpy的函數(shù),雖然功

溫馨提示

  • 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)論