第三章―Windows程式

看雪資料發表於2003-03-07

第三章―Windows程式
這一章我都不知道該如何寫了,呵呵~~
畢竟,Win32是一個非常深奧的系統,目前還容不得我這種小輩在這兒說三道四,不過,我既然是要寫給那些入門階段的朋友們看的,又不是寫給那些搞程式設計老鳥看的,所以,我也犯不著怕被人揹後指著罵 第三章―Windows程式 本章的名字就叫《Windows程式》而不是《Windows程式設計》所以,我只是講一些關於Windows程式運作的原理:
Windows為什麼叫Windows,相信所有用過的朋友都可以明白,那桌面上一個一個的視窗,就是它名字的由來。也就是這一個又一個視窗的出現,使計算機的使用一下子簡單了巨多。幾年前接觸過電腦的朋友一定知道DOS吧,不知道的話,去問加解密工具下載版的版主老哥,讓他跟你解釋 第三章―Windows程式 你還記的DOS下那黑乎乎的視窗吧,沒見過的哥們兒可以在開始選單中找出來看看。DOS透過一系列的命令來進行相應的操作,如進入一個目錄,刪除一個目錄等等等等。那種工作方式就叫做命令提示符方式,也即命令列。
現在國內不懂電腦的人還老愛說要想學電腦,必須要英語過關。(就是這個,嚇跑了多少僅僅是想學習一些基本操作的朋友)可能也就是源自DOS的原因吧。
後來,隨著硬體的支援以及技術上的提高,當然還有為了使電腦更方便的服務與人,慢慢的就有了所謂的檢視作業系統,從此,你不用再記憶那些大堆的指令了,而且操作上,也有了相大的提高,可以說作業系統發展到今天的份兒上,操作已經夠簡單了,去看看那些在網咖裡一把鼻涕的小孩子們吧…
當然,就像當年DOS之於命令提示行一樣,今天的Windows仍和當年一樣,佔據著大部分的使用者群。
(場外:一觀眾扔來一爛柿餅,你是唐僧啊,這麼多廢話)
馬上轉入正題,Windows之所以好用,除了不用背N多的命令外,一個原因就是因為它本身提供了大量的標準Windows GUI函式。所以對於使用者,面對的是同一套標準的視窗,對這些視窗的操作都是一樣的,所以使用不同的應用程式時無須重新學習操作。不用像當年在DOS下面那樣一安裝新程式,就要馬上看幫助,看說明。
而Windows GUI函式,只不過是微軟提供給程式開發人員的API(Application Programming Interface 應用程式設計介面)中的一小部分而以。Windows API是一大組功能強大的函式,它們本身駐紮在 Windows 中供人們隨時呼叫。這些函式的大部分被包含在幾個動態連結庫(DLL)中,譬如:kernel32.dll、 user32.dll 和 gdi32.dll。 Kernel32.dll中的函式主要處理記憶體管理和程式排程;user32.dll中的函式主要控制使用者介面;gdi32.dll中的函式則負責圖形方面的操作等等。
你可能多多少少聽說過API函式,如果你不太清楚到底是怎麼一回事的話,我儘量給你解釋的清楚一點。
不知道你有沒有想過,Windows中的那一個又一個視窗是怎麼畫出來的呢?呵呵,你可能用VB、Delphi編過程式,你有沒有想過你寫的程式中的那些視窗是怎麼形成的?是控制元件變成的。倒...呵呵,相信你當初學VB或Delphi的時候,所看的書上一定對視覺化程式設計環境大肆讚揚了一番吧,是不是也提到過比VC++怎麼怎麼方便?怎麼怎麼不用再為生成程式的介面而花費大量無用時間了等等。
(臺下上來一東北民工:小子,你找抽啊,還講不講了)
馬上開說,其實我只是想告訴你,所有你用的Windows下的程式,都是透過呼叫一個又一個的Windows API來執行相應任務的,沒有API,你的程式什麼也做不了。用VB、Delphi以及MFC的朋友也許會說我根本沒有呼叫什麼API啊!其實這些API都是由你所用的開發環境自動進行相應的轉換的。比如說你用Delphi新建一程式,什麼也不用動就直接按F9來執行它,是不是出現一個空白的窗體?這就是個標準的Windows程式,它有Windows程式所具有的一切特徵,如最大化按鈕、最小化按鈕、關閉按鈕…你可以透過滑鼠來移動它。
但是如果你想用VC++或MASM32來寫這樣一個程式,那麼你有兩種方法,在VC++中,你可以用MFC或直接呼叫API,而在MASM32中,你就只有直接呼叫API這一種方法。所謂直接呼叫API,就是指所有的操作都透過最原始的API來完成。透過直接呼叫API來生成這樣一個程式,你必須要先註冊視窗類(除非您使用 Windows 預定義的視窗類,如 MessageBox 或 dialog box);然後產生視窗;然後在桌面顯示視窗(除非您不想立即顯示它); 然後重新整理視窗客戶區;
麻煩吧,如果你想真正的讓這個程式能正常地執行下來,還要再加入以下步驟:
1.你要得到您應用程式的控制程式碼。2.窗體顯示後就進入無限的獲取視窗訊息的迴圈。3. 如果有訊息到達,由負責該視窗的視窗回撥函式處理。4. 如果使用者關閉視窗,進行退出處理。
上面這此步驟,都需要呼叫相應的API來完成。比如說得到程式的控制程式碼用GetModuleHandle註冊視窗類用RegisterClass或RegisterClassEx;註冊後,還要用CreateWindowEx函式來生成相應視窗,而後用ShowWindow來顯示它,之後還會用UpdateWindow 來更新客戶區等等等等。這些還都不算呢,如果你真透過直接呼叫API去寫一個稍大一點兒的程式的話,你會發現那是一個多麼不令人愉快的事情。
上面說的這些,只不過是API中的一小小小小小小小小小小….部分,這才幾個,真正的API有成百上千個,包括對系統各個方面進行的操作。沒有API,你的程式什麼也幹不了。比如說你的程式中有一個Edit控制元件,VB中應該叫做Text控制元件吧,你想將使用者輸入到裡面的資訊放到一個變數中去,那麼Delphi中可以用Str:=Edit1.text來實現。VB中應該是Str=Text1.Text;但是如果你用API,想要得到Edit輸入框裡的文字內容,就要呼叫GetDlgItemInt(Edit中輸入的值當做數值來用)GetDlgItemText、GetDlgItemTextA(Edit中輸入的值當做字串來用)。而上面我說的VB、Delphi得到編輯框中輸入的內容的方法,最終在編譯成可執行檔案的時候,也會由編譯器自動對其進行相應的轉換。你只要明白一件事就好了,那就是你所用的程式,無時無刻都在呼叫著系統中的各種各樣的API函式。
其實Windows中的API,就相當於當年DOS系統中的系統功能呼叫,及中斷21。只不過在數量上和功能上,都是DOS系統功能呼叫所不及的。
如果你還是看不明白,那我不怪你,可能是我講的不清楚,所以,還是給你推薦老牛寫的書吧。力推《Windows程式設計》,看過之後你會內力大增的,那時候你所知道的知識就不止是API而以了。
其實話說回來,我這篇文章不是教你程式設計的,所以關於Windows程式的原理,沒有必要說那麼多,我之所以跟你講API,是想讓你知道Windows程式的執行機制。免的到時候用偵錯程式下斷點的時候問什麼是API。(眾人(十分憤怒地)衝上臺來:“拉下去PK!把我們當什麼了!”)
(我再次來到臺上,鏡頭切向臉的一側,來個特寫。只見上面有若干處大小不同的傷口)可能還有些重點的地方我沒有提到,歡迎指正。如果你有什麼不明白的地方,歡迎跟貼提問。只要別太那個,比如說“你能把所有的API給我列出來讓我回去背背好嗎?” 第三章―Windows程式
附上幾個常用的API函式吧。相信你此時因該以經對API有個大概的瞭解了。
MessageBox  顯示一資訊對話方塊
MessageBoxEx  顯示一資訊對話方塊
MessageBoxIndirect 顯示一定製資訊對話方塊
(以上這三個,可以用來中斷那些錯誤提示,比如說你註冊碼輸入錯誤了,程式就可能透過這幾個函式中的一個,來提示你錯誤)
GetDlgItemInt  得指定輸入框整數值
GetDlgItemText 得指定輸入框輸入字串
GetDlgItemTextA  得指定輸入框輸入字串
(軟體可以用這三個來得到使用者輸入的註冊碼)
GetLocalTime 得當前本地時間
GetSystemTime 得當前系統時間
(軟體可以用這兩個來判斷軟體是否過期)
RegQueryvalueA 獲取一個項的設定值
RegQueryvalueExA 獲取一個項的設定值
RegSetvalueA 設定指定項或子項的值  
RegSetvalueExA 設定指定項的值
(如果軟體用登錄檔儲存註冊資訊的話,那麼這幾個也許會有用)
上面講的,只是幾個平時比較常見的,更多請參見看雪以前的教程或Windows開發人員手冊。
最後,我們還要隆重介紹一個重量級函式,你可能不知道API是什麼,但你只要用過偵錯程式,就一定知道它的名字。你可以不知道美國現任的總統是誰,但是你一定要知道這個函式。我雖然知道現任美國總統是鮑威爾 第三章―Windows程式 但我同時也知道這個函式是誰。
它就是----吳孟達!(導演:NG)重新說。它就是hmemcpy。
這個函式是幹什麼的?
它是一個非常簡單的函式。只完成一項非常非常基本的任務,就是把資料從一個地方複製到另一個地方。應用程式本身並不呼叫它,理由很簡單,它很低階(彙編:誰敢說跟我一樣?)。但是大部分API函式卻非常頻繁地呼叫它。所以,它也叫萬能函式。平時你可能都不知道有這麼個東西,但是斷起程式來卻非常管用。但目前到了2K跟Xp下,卻沒有這個函式了,與之相應的是一個叫memcpy的函式,雖然功能與其相同,但是基本上已經是個廢人了 第三章―Windows程式 總知,你用memcpy根本就斷不下什麼來。所以,這麼一個好使的函式只能在98下使用了。這就像美國的總統一樣,再好使也只能使八年,不好使的就別說了。說不定明年就把他踢飛 第三章―Windows程式
別的我也不多說什麼了,這章你就知道API是什麼就成了。
如果你覺的有什麼不妥的地方或有什麼問題,並且想文明一點地表代出來的話,就請在回覆。如果想野蠻一點的話,就拿雞蛋往你顯示器上丟吧 第三章―Windows程式
<本章完>

相關文章