三、如何才能提升你對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, "這堿O內容", "標題", 0
End Sub
先讓我們來分析一下,首先看第一個參數Byval hWnd As Long,很顯然這是一個長整形變數,所以我們這婸搨n傳遞的是數位,你可能會發現我們傳遞的並不是數字啊,而是 Me.hwnd??很奇怪是嗎?如果你真的有此疑問說明你是真心想要學習好API的,現在就讓我們來看看Me.hwnd到底是什麼東西?以下摘自VB幫助文檔:
hWnd 屬性:返回表單或控制項的控制碼。
句 柄:是由操作環境定義的一個唯一的整數值,它被程式用來標識或者切換到物件,如表單或控制項等。
現在估計你差不多就已經明白了,我們調用的hwnd其實是一個控制碼整數值,你可以用 Msgbox Me.hwnd 看一下就知道了。至於Me這是一個關鍵字,代表當前Form表單物件。如:Me.Caption="標題"、Me.BackColor=vbRed等。
接上面的,首先我們傳入了Me.hwnd,表示是當前視窗調用MessageBox,這塈i訴大家一個技巧,也就是以後凡是看到Byval hwnd As Long,一般都是需要傳入控制碼的,至於傳入哪個物件控制碼,那就要看你是怎麼實現的了。
ByVal lpText As String,這個是字串變數,標識著叫我們需要傳入字串進去,可以看堶悸瘍僂あr元lpText,屬於文本的意思,也就是說是用來顯示MsgBox中的消息文本的。
ByVal lpCaption As String,也是字串變數,還是傳入字串進去。在看堶悸瘍僂あr元lpCaption,其實就是顯示MsgBox標題的。
ByVal wType As Long,這是一個整形變數,需要傳遞整形數位,還是看堶悸瘍僂あr元wType,標識著顯示MsgBox類型,這堨i以像VB的MsgBox一樣使用,如這堨i以傳入:vbYesNo,vbOkCancel等,如果忽略那就傳入0即可。
好了,按F5啟動程式,點擊Command1,接著就會彈出一個訊息方塊,這塈畯抳s作以及分析MsgBox已經完成了。希望你能在這段學習到一些知識。
2,來點實用的吧
就拿隱藏Windows任務管理器來說吧,這堨u能隱藏任務管理器中的視窗,不能隱藏進程。(問:有沒有隱藏進程的?答:你想幹什麼?),當程式運行後你無法從任務管理器的視窗中關閉程式,只能從進程中進行終止。好了,還是老規矩,打開API流覽器,輸入Ge●綜合木馬網站●ont=新細明體]和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的表面意思和傳遞值變數。
先看Ge●綜合木馬網站●ont=新細明體]表面意思:獲取窗口。傳遞值變數:hWnd整形控制碼,wCmd整形命令值。
再看ShowWindow,表面意思:顯示視窗。傳遞值變數:hWnd整形控制碼,nCmdShow整形命令值。
然後是使用代碼,先看lphWnd = GetWindow(Me.hwnd, GW_OWNER)這句,這句意思是獲取當前視窗的所有者視窗控制碼,可以看到Ge●綜合木馬網站●ont=新細明體]是Function過程函數,執行以後會返回相應的視窗控制碼值,這個值為Long整形(同控制碼)。接著調用ShowWindow lphWnd, SW_HIDE,這句意思是顯示lphwnd這個控制碼的視窗,關鍵一句是最後的SW_HIDE,這是API函數的常量。通過設置常量能讓系統知道API到底應該怎麼執行顯示視窗,是顯示?還是隱藏?Hide當然是隱藏的意思。好了,編譯成Exe,運行後打開任務管理器,查看程式視窗,還有嗎?
我又要說一下了,有些人可能不懂為什麼要用GW_OWNER這些常量,這些到底有什麼用?還有就是我怎麼知道哪些API對應哪些的常量?其實這些常量你只要稍微注意一下就知道它們是怎麼回事了,如在Ge●綜合木馬網站●ont=新細明體]中我使用GW_OWNER,在ShowWindow中我使用SW_HIDE這些常量都有一個共同的特點,就是他們都是以API的單詞第一個字母為標準。如Ge●綜合木馬網站●ont=新細明體]相對應的常量就是Get(G)Window(W)=GW,ShowWindow相對應的常就是Show(S)Window(W)=SW,這些常量可以自己在VB的API流覽器中找找看。
3,繼續往下學吧。。
上面兩個我們講到了一般API的使用方法,和一些API常量的使用方法,接著我們來看看API類型的使用方法,在瞭解這一小節前請先搞懂VB中的自定義類型(Type)這章,否則你可能會稀婼k塗的,到時別怪我沒提醒你哦!
這次讓我們來獲取一下滑鼠指標的位置。這堭苳j家一個技巧,當你想用API去實現某一特定的功能時,卻又不知道該用哪個API,這時你可以就表面的意思到API流覽器找找,有70%以上的機率可以找到哦!現在就拿這個API開刀,那我們應該如何找?別著急,往下看:
如我們現在要獲取滑鼠指標位置,可以這樣翻譯一下:Get(獲取)Cursor(指針)Pos(位置),組合起來:GetCursorPos,呵呵,一條API就這樣出來了,到API流覽器輸入這個組合單詞,呵,有吧?見以下:
Private Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
好了好了,高興一下就算了,現在讓我們分析一下這個API,看其他的沒啥不同的,其中只有一個參數,就是最後一個變數有些不懂?在VB中好像沒有見過這個變數?不明白麼?那就再繼續往下看。
lpPoint As POINTAPI,POINTAPI?很顯然,在VB中並沒有此類型,一般都是String、Integer、Long、Byte等變數類型,那麼這個也就理所當然的是自定義類型(問:什麼是自定義類型?答:不知道,自已不會看書啊)。既然是自定義類型,那麼我們如何才能知道它是如何定義的呢?這堣]就不用你操心啦,還是API流覽器,在最上面的Combox中選擇類型,這時下面List中也就自然的把API的相關類型顯示出來了,現在我們開始在Text文本框中輸入我們需要的自定義類型,POINTAPI,點擊添加,出來了吧?如下:
Private Type POINTAPI
x As Long
y As Long
End Type
好了,現在開始寫代碼,添加一個Timer控制項,設置屬性見以下:
Interval = 100
Enabled
= True
雙擊Timer控制項,轉到代碼環境中寫入以下代碼:
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Timer1_Timer()
Dim lpPoint As POINTAPI
GetCursorPos lpPoint
Me.Caption = "X = " & lpPoint.x & " Y = " & lpPoint.y
End Sub
好了,分析開始,緊張不?別緊張,沒啥值得緊張的!見以下:
Dim lpPoint As POINTAPI,申明一個POINTAPI類型變數,我們學過自定義類型的朋友都知道,一般使用自定義類型時都需要先申明一個相關的類型變數方可使用。
GetCursorPos lpPoint,這一步我不說你都知道,調用API唄。通過這個API獲取滑鼠指標的相關資訊。這塈畯怢洏峇F自己聲明的lpPoint變數,那為啥要使用這個變數呢?這塈畯怞^過頭來就前兩節我們所分析的那樣進行分析,可以看到GetCursorPos所需要傳遞的值,如果是Long,我們就傳入整形數字,如果是String,我們就傳入字串,這堿OPOINTAPI,所以理所當然是要傳入POINTAPI類型,但是!VB中的自定義類型不可以直接使用,所以我們需要先聲明一個相同類型的變數。不知道說了這麼多你懂了沒?
Me.Caption = "X = " & lpPoint.x & " Y = " & lpPoint.y,最後一句,也就是用來顯示當前滑鼠的座標值的,我們通過聲明的lpPoint變數來獲取相應的滑鼠座標值,如果你不懂,那就請你先把VB自定義類型這章學完再說。
這媄鰫API的一些使用方法及範例就先介紹到這堙A如果你還有耐心往下看下去的話,那我們就接著往下聊!
預知詳情,請看續集! |