在VB中使用API函數(shù)(什么是API? )
什么是API?
API(Advanced Programmers Interface,高級程序員接口)(注:API實(shí)際是指Application Programming Interface,應(yīng)用程序編程接口;此處疑為原文錯(cuò)誤,不過在VB中也可以這么說吧!)是一套用來控制Windows的各個(gè)部件(從桌面的外觀到位一個(gè)新進(jìn)程分配的內(nèi)存)的外觀和行為的一套預(yù)先定義的Windows函數(shù).用戶的每個(gè)動(dòng)作都會(huì)引發(fā)一個(gè)或幾個(gè)函數(shù)的運(yùn)行以Windows告訴發(fā)生了什么.
這在某種程度上很象Windows的天然代碼.其他的語言只是提供一種能自動(dòng)而且更容易的訪問API的方法.VB在這方面作了很多工作.它完全隱藏了API并且提供了在Windows環(huán)境下編程的一種完全不同的方法.
這也就是說,你用VB寫出的每行代碼都會(huì)被VB轉(zhuǎn)換為API函數(shù)傳遞給Windows.例如,Form1.Print...VB 將會(huì)以一定的參數(shù)(你的代碼中提供的,或是默認(rèn)參數(shù))調(diào)用TextOut 這個(gè)API函數(shù).
同樣,當(dāng)你點(diǎn)擊窗體上的一個(gè)按鈕時(shí),Windows會(huì)發(fā)送一個(gè)消息給窗體(這對于你來說是隱藏的),VB獲取這個(gè)調(diào)用并經(jīng)過分析后生成一個(gè)特定事件(Button_Click).
API函數(shù)包含在Windows系統(tǒng)目錄下的動(dòng)態(tài)連接庫文件中(如User32.dll,GDI32.dll,Shell32.dll...).
API 聲明
正如在"什么是API"中所說,API函數(shù)包含在位于系統(tǒng)目錄下的DLL文件中.你可以自己輸入API函數(shù)的聲明,但VB提供了一種更簡單的方法,即使用API Text Viewer.
要想在你的工程中聲明API函數(shù),只需運(yùn)行API Text Viewer,打開Win32api.txt(或.MDB如果你已經(jīng)把它轉(zhuǎn)換成了數(shù)據(jù)庫的話,這樣可以加快速度.注:微軟的這個(gè)文件有很多的不足,你可以試一下本站提供下載的api32.txt),選擇"聲明",找到所需函數(shù),點(diǎn)擊"添加(Add)"并"復(fù)制(Copy)",然后粘貼(Paste)到你的工程里.使用預(yù)定義的常量和類型也是同樣的方法.
你將會(huì)遇到一些問題:
假設(shè)你想在你的窗體模塊中聲明一個(gè)函數(shù).粘貼然后運(yùn)行,VB會(huì)告訴你:編譯錯(cuò)誤...Declare 語句不允許作為類或?qū)ο竽K中的 Public 成員...看起來很糟糕,其實(shí)你需要做的只是在聲明前面添加一個(gè)Private(如 Private Declare Function...).--不要忘了,可是這將使該函數(shù)只在該窗體模塊可用.
在有些情況下,你會(huì)得到"不明確的名稱"這樣的提示,這是因?yàn)楹瘮?shù).常量或其他的什么東西共用了一個(gè)名稱.由于絕大多數(shù)的函數(shù)(也可能是全部,我沒有驗(yàn)證過)都進(jìn)行了別名化,亦即意味著你可以通過Alias子句使用其它的而不是他們原有的名稱,你只需簡單地改變一下函數(shù)名稱而它仍然可以正常運(yùn)行.
你可以通過查看VB的Declare語句幫助主題來獲取有關(guān)Alias的詳細(xì)說明.
消息(Messages)
好了,現(xiàn)在你已經(jīng)知道什么是API函數(shù)了,但你也一定聽說過消息(如果你還沒有,你很快就會(huì))并且想知道它是什么.消息是Windows告訴你的程序發(fā)生了哪些事件或要求執(zhí)行特定操作的基本方法.例如,當(dāng)用戶點(diǎn)擊一個(gè)按鈕,移動(dòng)鼠標(biāo),或是向文本框中鍵入文字時(shí),一條消息就會(huì)被發(fā)送給你的窗體.
所有發(fā)送的消息都有四個(gè)參數(shù)--一個(gè)窗口句柄(hwnd),一個(gè)消息編號(msg)還有兩個(gè)32位長度(Long)的參數(shù).
hwnd即要接受消息的一個(gè)窗口的句柄,msg即消息的標(biāo)識符(編號).該標(biāo)識符是指引發(fā)消息的動(dòng)作類型(如移動(dòng)鼠標(biāo)),另外兩個(gè)參數(shù)是該消息的附加參數(shù)(例如當(dāng)鼠標(biāo)移動(dòng)時(shí)光標(biāo)的當(dāng)前位置)
但是,當(dāng)消息發(fā)送給你時(shí)你為什么看不到呢--就象有人在偷你的信一樣?請先別惱火,讓我告訴你.
小偷其實(shí)是Visual Basic.但它并沒有偷走你的信,而是在閱讀了之后挑出重要的以一種好的方式告訴你.這種方式就是你代碼中的事件(Event).
這樣,當(dāng)用戶在你的窗體上移動(dòng)鼠標(biāo)時(shí),Windows會(huì)發(fā)送一條WM_MOUSEMOVE消息給你的窗口,VB得到這條消息以及它的參數(shù)并運(yùn)行你在事件MouseMove中的代碼,同時(shí)VB會(huì)把這條消息的第二個(gè)32位數(shù)(它包含了x,y坐標(biāo),單位為像素(Pixel),每個(gè)位16位)轉(zhuǎn)換為兩個(gè)單精度數(shù),單位為緹(Twip).
現(xiàn)在,如果你需要光標(biāo)坐標(biāo)的像素表示,然而VB已經(jīng)把它轉(zhuǎn)換成了緹,因此你需要重新把它轉(zhuǎn)換為以像素為單位.在這里,Windows給了你所需要的,但VB"好意地"進(jìn)行了轉(zhuǎn)換而使你不得不重新轉(zhuǎn)換.你可能會(huì)問--我難道不能自己接收消息嗎?答案是肯定的,你可以使用一種叫做子類處理(Subclass)的方法.但你除非必須否則最好不要使用,因?yàn)檫@與VB的安全程序設(shè)計(jì)有一點(diǎn)點(diǎn)的違背.(注:子類處理確實(shí)有很大的風(fēng)險(xiǎn),但如果使用得當(dāng),是很有用處的.不過有一點(diǎn)一定要注意,即千萬不要使用VB的斷點(diǎn)調(diào)試功能,這可能會(huì)導(dǎo)致VB崩潰!)
需要補(bǔ)充說明的是:你可以發(fā)送消息給你自己的窗口或其他的窗口,只需調(diào)用SendMessage或PostMessage(SendMessage會(huì)使接受到消息的窗口立刻處理消息,而PostMessage是把消息發(fā)送到一個(gè)稱為消息隊(duì)列的隊(duì)列中去,等候處理(它將會(huì)在該消息處理完后返回,例如有些延遲)).你必須制定接受消息的窗口的句柄,欲發(fā)送消息的編號(所有的消息的編號均為常量,你可以通過API Text Viewer查得)以及兩個(gè)32位的參數(shù).
(責(zé)任編輯:admin)
- ·API函數(shù)詳細(xì)解釋
- ·Access從剪切版里復(fù)制和粘貼數(shù)據(jù)
- ·Access利用api實(shí)現(xiàn)打開/關(guān)閉光驅(qū)
- ·應(yīng)用程序開機(jī)自動(dòng)啟動(dòng)(注冊表操作技巧
- ·Access VBA 判斷網(wǎng)絡(luò)是否連通的多種辦
- ·什么是ADP,了解ADP的優(yōu)缺點(diǎn)
- ·優(yōu)秀產(chǎn)品大全--通用票據(jù)打印軟件(新)
- ·[技巧分享]多條Shell語句執(zhí)行導(dǎo)致判斷
- ·在access中可以調(diào)用API函數(shù)GetFileInfo
- ·Access API集中營--增加臨時(shí)使用的字體
- ·API ShellExecute 功能說明及應(yīng)用示例
- ·在VB中使用API函數(shù)(什么是API? )
- ·API實(shí)現(xiàn)完美的圖片出現(xiàn)效果(轉(zhuǎn))
- ·API 設(shè)置調(diào)整系統(tǒng)當(dāng)前時(shí)間
- ·如何檢測以及設(shè)置鍵盤狀態(tài)
- ·不關(guān)閉當(dāng)前數(shù)據(jù)庫COPY當(dāng)前數(shù)據(jù)庫
- ·API函數(shù)詳細(xì)解釋
- ·Access從剪切版里復(fù)制和粘貼數(shù)據(jù)
- ·Access利用api實(shí)現(xiàn)打開/關(guān)閉光驅(qū)
- ·應(yīng)用程序開機(jī)自動(dòng)啟動(dòng)(注冊表操作技巧)
- ·Access VBA 判斷網(wǎng)絡(luò)是否連通的多種辦法(函
- ·什么是ADP,了解ADP的優(yōu)缺點(diǎn)
- ·優(yōu)秀產(chǎn)品大全--通用票據(jù)打印軟件(新)
- ·[技巧分享]多條Shell語句執(zhí)行導(dǎo)致判斷出錯(cuò)
- ·在access中可以調(diào)用API函數(shù)GetFileInformat
- ·Access API集中營--增加臨時(shí)使用的字體
- 發(fā)表評論
-
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。評價(jià):匿名?
- 最新評論 進(jìn)入詳細(xì)評論頁>>