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瀏覽器中找找看。
3,我還想寫下去,不過我不知道寫得怎麽樣,先發出來看看大家的反應再說。大家如果發現有什麽不對的地方盡請指出,我接受大家的批評。。。。