VB API初級入門

一、API是什麼?  

  這個我本來不想說的,不過也許你知道其它人不知道,這裏爲了照顧一下新手,不得不說些廢話,請大家諒解。  

  Win32 API即爲Microsoft 32位平臺的應用程序編程接口(Application Programming Interface)。所有在Win32平臺上運行的應用程序都可以調用這些函數。  

  使用Win32 API,應用程序可以充分挖掘Windows的32位操作系統的潛力。Mircrosoft的所有32位平臺都支持統一的API,包括函數、結構、消息、宏及接口。使用 Win32 API不但可以開發出在各種平臺上都能成功運行的應用程序,而且也可以充分利用每個平臺特有的功能和屬性。  

    
  以上爲API的相關介紹,不過有些新手看了以後可能還是不怎麼明白API到底有什麼用?這裏請不要着急,如果你有足夠耐心的話,請慢慢往下看。  

二、如何使用API?  

  估計這纔是大家真正關心的,那麼如何使用API呢?在瞭解API之前,先打開你的VB書,翻到過程函數這章來,在搞清楚API之前應該先搞懂過程函數是怎麼一回事!如果你還不知道過程的工作方式,那麼請先不要急着往下看,那樣容易走很多彎路。  

  好了,當你理解了過程函數時,也就是你可以使用API的時候了,別把API看得太難,你就像使用過程函數一樣使用API就可以了。首先,讓我們看看一個簡單的API,以下:  

  Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)  

  以上這個API的呢是起一個延時作用。你如果是剛接觸API的話可能會感到API的書寫及其複雜,而且會感到很不適應。其實這沒什麼的,慢慢習慣就好了。至於API這些複雜的書寫你就不用操心了,在你安裝VB的時候微軟已經幫我們帶上了API瀏覽器,這些全部都可以利用API瀏覽器幫我們自動生成。API瀏覽器的位置位於[開始菜單-程序-Microsoft Visual Basic 6.0 中文版-Microsoft Visual Basic 6.0 中文版工具-API 文本瀏覽器]。打開API瀏覽器,在最上面的一個文本框中輸入Sleep,這時下面列表框中就會自動顯示相應的API函數,然後點右邊添加按鈕即可,接着點擊複製按鈕,這時你就可以用Ctrl+V把聲明的API添加到VB代碼窗口中了。  

  這裏我要說一下,有些新手可能還弄不明白。API的聲明範圍一般有兩種模式,一種是Private(私有的),一種是Public(公用的)。一般Private是聲明在類模塊或窗體類中,Public聲明在模塊中。你在添加API的時候,添加按鈕下面就有API的聲明範圍,可以根據自己的需要進行添加。這裏我們一般選擇私有的(Private)就可以了。  

  經過上面,我們知道如何添加API,接着我們分析一下API聲明,這是你瞭解API必備的。首先看第一個單詞Private,很顯然,我上面剛剛講過,這是申明一個私有的API變量。再看第二個Declare,這個單詞幫我們告訴VB是在申明API函數,一般申明外在的API函數時都必須帶上這個單詞。第三個Sub,別告訴我你不知道什麼意思?這就是我叫你先學習VB中過程函數的意思,這個說白了就是沒有反回值,一般如果不是Sub而是Function都帶有反回值的。第四個Lib,這個是告訴VB我們要聲明哪一個DLL中的API函數,也就是告訴VB我們要申明第五個單詞kernel32.dLL中的API,一般寫DLL名稱時都要用雙引號括起來,如"user32"、"shell32.dll"等,至於後面的.dll這個可以帶可不帶。再來看第六個Alias,這個也是需要同後面一個一起用的,我們應該把第六個和第七個連起來一起看Alias "Sleep",這個意思表示將被調用的過程在DLL中還有另外的名稱,這個是可選的。最後括號裏面的,也就是和過程函數一樣,你傳入相應的值就可以了。  

  上面我們分析完API函數聲明以後,接着我們就要自己動手寫代碼了。先把這個API複製到Form1代碼窗口中,然後寫如下代碼:  

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)  
Private Sub Form_Load()  
     Sleep 2000  
End Sub  

  解釋一下,也就是在窗體啓動時使用Sleep API進行延時2秒,後面的參數dwMilliseconds是表示你要延時的秒數,基本上和設置Timer中的秒數一樣。你再看一下Sleep 2000的使用方式,是不是和使用VB過程函數一樣呢?好了,我們的第一個VB API程序寫完了,可以看到使用API並不是一件很難的事。  

三、如何才能提升你對API的學習興趣?  

  API,我常把它看做成過程函數,不過每人都有每人的見解和理解方式,自己的理解方式只要可以幫助自己更好的學習和掌握API,也沒必要一定要學習他人的。  

  1,自己做MsgBox  

  瞭解API參數的使用方法是很重要的,這裏我們不用VB的MsgBox,直接使用API彈出MsgBox消息框。首先,打開API瀏覽器,選擇MessageBox,大家可以用這個API和VB內置的MsgBox比較一下,其實MsgBox也就是MessageBox的縮寫,只不過一個是API,一個是VB內置的,但兩者都是通過API進行工作的。好了,選擇私有聲明方式,粘貼到VB代碼編輯窗口中,然後新建一個CommandButton,寫入以下代碼:  

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA"   
(ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String,   
ByVal wType As Long) As Long  
Private Sub Command1_Click()  
     MessageBox Me.hwnd, "這裏是內容", "標題", 0  
End Sub  

  先讓我們來分析一下,首先看第一個參數Byval hWnd As Long,很顯然這是一個長整形變量,所以我們這裏需要傳遞的是數字,你可能會發現我們傳遞的並不是數字啊,而是 Me.hwnd??很奇怪是嗎?如果你真的有此疑問說明你是真心想要學習好API的,現在就讓我們來看看Me.hwnd到底是什麼東西?以下摘自VB幫助文檔:  
  hWnd 屬性:返回窗體或控件的句柄。  
  句 柄:是由操作環境定義的一個唯一的整數值,它被程序用來標識或者切換到對象,如窗體或控件等。  

  現在估計你差不多就已經明白了,我們調用的hwnd其實是一個句柄整數值,你可以用 Msgbox Me.hwnd 看一下就知道了。至於Me這是一個關鍵字,代表當前Form窗體對象。如:Me.Caption="標題"、Me.BackColor=vbRed等。  

  接上面的,首先我們傳入了Me.hwnd,表示是當前窗口調用MessageBox,這裏告訴大家一個技巧,也就是以後凡是看到Byval hwnd As Long,一般都是需要傳入句柄的,至於傳入哪個對象句柄,那就要看你是怎麼實現的了。  
  ByVal lpText As String,這個是字符串變量,標識着叫我們需要傳入字符串進去,可以看裏面的變量字符lpText,屬於文本的意思,也就是說是用來顯示MsgBox中的消息文本的。  
  ByVal lpCaption As String,也是字符串變量,還是傳入字符串進去。在看裏面的變量字符lpCaption,其實就是顯示MsgBox標題的。  
  ByVal wType As Long,這是一個整形變量,需要傳遞整形數字,還是看裏面的變量字符wType,標識着顯示MsgBox類型,這裏可以像VB的MsgBox一樣使用,如這裏可以傳入:vbYesNo,vbOkCancel等,如果忽略那就傳入0即可。  

  好了,按F5啓動程序,點擊Command1,接着就會彈出一個消息框,這裏我們製作以及分析MsgBox已經完成了。希望你能在這段學習到一些知識。  

  2,來點實用的吧  

  就拿隱藏Windows任務管理器來說吧,這裏只能隱藏任務管理器中的窗口,不能隱藏進程。(問:有沒有隱藏進程的?答:你想幹什麼?),當程序運行後你無法從任務管理器的窗口中關閉程序,只能從進程中進行終止。好了,還是老規矩,打開API瀏覽器,輸入GetWindow和ShowWindow兩個API,聲明範圍還是私有的,複製粘貼到Form代碼窗口中,嗯,好了?別急,還是API瀏覽器,選擇Combox中的常數,輸入GW_OWNER和SW_HIDE這兩個API常數,然後粘貼到代碼窗口中,問我這兩個是幹什麼的?那就接着往下看吧。寫入以下代碼:  

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long,   
ByVal wCmd As Long) As Long  
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long,   
ByVal nCmdShow As Long) As Long  
Private Const GW_OWNER = 4  
Private Const SW_HIDE = 0  
Private Sub Form_Load()  
     Dim lphWnd As Long  
     lphWnd = GetWindow(Me.hwnd, GW_OWNER)  
     ShowWindow lphWnd, SW_HIDE  
End Sub  

  又到了分析的時候了,這對剛入門的新手可謂是最激動的時候了。好了,還是老子,看看兩個API的表面意思和傳遞值變量。  

  先看GetWindow,表面意思:獲取窗口。傳遞值變量:hWnd整形句柄,wCmd整形命令值。  
  再看ShowWindow,表面意思:顯示窗口。傳遞值變量:hWnd整形句柄,nCmdShow整形命令值。  

  然後是使用代碼,先看lphWnd = GetWindow(Me.hwnd, GW_OWNER)這句,這句意思是獲取當前窗口的所有者窗口句柄,可以看到GetWindow是Function過程函數,執行以後會返回相應的窗口句柄值,這個值爲Long整形(同句柄)。接着調用ShowWindow lphWnd, SW_HIDE,這句意思是顯示lphwnd這個句柄的窗口,關鍵一句是最後的SW_HIDE,這是API函數的常量。通過設置常量能讓系統知道API到底應該怎麼執行顯示窗口,是顯示?還是隱藏?Hide當然是隱藏的意思。好了,編譯成Exe,運行後打開任務管理器,查看程序窗口,還有嗎?  

  我又要說一下了,有些人可能不懂爲什麼要用GW_OWNER這些常量,這些到底有什麼用?還有就是我怎麼知道哪些API對應哪些的常量?其實這些常量你只要稍微注意一下就知道它們是怎麼回事了,如在GetWindow中我使用GW_OWNER,在ShowWindow中我使用SW_HIDE這些常量都有一個共同的特點,就是他們都是以API的單詞第一個字母爲標準。如GetWindow相對應的常量就是Get(G)Window(W)=GW,ShowWindow相對應的常就是Show(S)Window(W)=SW,這些常量可以自己在VB的API瀏覽器中找找看。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章