第三章—Windows程式

來源:互聯網
上載者:User

標籤:使用   os   檔案   資料   io   問題   

這一章我都不知道該如何寫了,呵呵~~
畢竟,Win32是一個非常深奧的系統,目前還容不得我這種小輩在這兒說三道四,不過,我既然是要寫給那些入門階段的朋友們看的,又不是寫給那些搞程式設計老鳥看的,所以,我也犯不著怕被人背後指著罵 本章的名字就叫《Windows程式》而不是《Windows程式設計》所以,我只是講一些關於Windows程式運作的原理:
Windows為什麼叫Windows,相信所有用過的朋友都可以明白,那案頭上一個一個的視窗,就是它名字的由來。也就是這一個又一個視窗的出現,使電腦的使用一下子簡單了巨多。幾年前接觸過電腦的朋友一定知道DOS吧,不知道的話,去問加解密工具下載版的版主老哥,讓他跟你解釋 你還記的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給我列出來讓我回去背背好嗎?”
附上幾個常用的API函數吧。相信你此時因該以經對API有個大概的瞭解了。
MessageBox 顯示一資訊對話方塊
MessageBoxEx 顯示一資訊對話方塊
MessageBoxIndirect 顯示一定製資訊對話方塊
(以上這三個,可以用來中斷那些錯誤提示,比如說你註冊碼輸入錯誤了,程式就可能通過這幾個函數中的一個,來提示你錯誤)
GetDlgItemInt 得指定輸入框整數值
GetDlgItemText 得指定輸入框輸入字串
GetDlgItemTextA 得指定輸入框輸入字串
(軟體可以用這三個來得到使用者輸入的註冊碼)
GetLocalTime 得當前本地時間
GetSystemTime 得當前系統時間
(軟體可以用這兩個來判斷軟體是否到期)
RegQueryvalueA 擷取一個項的設定值
RegQueryvalueExA 擷取一個項的設定值
RegSetvalueA 設定指定項或子項的值
RegSetvalueExA 設定指定項的值
(如果軟體用註冊表格儲存體註冊資訊的話,那麼這幾個也許會有用)
上面講的,只是幾個平時比較常見的,更多請參見看雪以前的教程或Windows開發人員手冊。
最後,我們還要隆重介紹一個重量級函數,你可能不知道API是什麼,但你只要用過調試器,就一定知道它的名字。你可以不知道美國現任的總統是誰,但是你一定要知道這個函數。我雖然知道現任美國總統是鮑威爾 但我同時也知道這個函數是誰。
它就是----吳孟達!(導演:NG)重新說。它就是hmemcpy。
這個函數是幹什麼的?
它是一個非常簡單的函數。只完成一項非常非常基本的任務,就是把資料從一個地方複製到另一個地方。應用程式本身並不調用它,理由很簡單,它很低級(彙編:誰敢說跟我一樣?)。但是大部分API函數卻非常頻繁地調用它。所以,它也叫萬能函數。平時你可能都不知道有這麼個東西,但是斷起程式來卻非常管用。但目前到了2K跟Xp下,卻沒有這個函數了,與之相應的是一個叫memcpy的函數,雖然功能與其相同,但是基本上已經是個廢人了 總知,你用memcpy根本就斷不下什麼來。所以,這麼一個好使的函數只能在98下使用了。這就像美國的總統一樣,再好使也只能使八年,不好使的就別說了。說不定明年就把他踢飛
別的我也不多說什麼了,這章你就知道API是什麼就成了。
如果你覺的有什麼不妥的地方或有什麼問題,並且想文明一點地表代出來的話,就請在回複。如果想野蠻一點的話,就拿雞蛋往你顯示器上丟吧
<本章完>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.