黃易群俠傳M脫機外掛應用程式黃易神行
7037
23

[轉貼] VB入門必看——續集一

vion 發表於 2009-3-11 21:23:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |

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

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

  

1,自己做MsgBox


  瞭解API參數的使用方法是很重要的,這塈畯怳ㄔVBMsgBox,直接使用API彈出MsgBox訊息方塊。首先,打開API流覽器,選擇MessageBox,大家可以用這個APIVB內置的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以像VBMsgBox一樣使用,如這堨i以傳入:vbYesNo,vbOkCancel等,如果忽略那就傳入0即可。

  好了,按F5啟動程式,點擊Command1,接著就會彈出一個訊息方塊,這塈畯抳s作以及分析MsgBox已經完成了。希望你能在這段學習到一些知識。

  2,來點實用的吧

  就拿隱藏Windows任務管理器來說吧,這堨u能隱藏任務管理器中的視窗,不能隱藏進程。(問:有沒有隱藏進程的?答:你想幹什麼?),當程式運行後你無法從任務管理器的視窗中關閉程式,只能從進程中進行終止。好了,還是老規矩,打開API流覽器,輸入Ge●綜合木馬網站●ont=新細明體]和ShowWindow兩個API,聲明範圍還是私有的,複製粘貼到Form代碼視窗中,嗯,好了?別急,還是API流覽器,選擇Combox中的常數,輸入GW_OWNERSW_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)=GWShowWindow相對應的常就是Show(S)Window(W)=SW,這些常量可以自己在VBAPI流覽器中找找看。

  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中並沒有此類型,一般都是StringIntegerLongByte等變數類型,那麼這個也就理所當然的是自定義類型(問:什麼是自定義類型?答:不知道,自已不會看書啊)。既然是自定義類型,那麼我們如何才能知道它是如何定義的呢?這堣]就不用你操心啦,還是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如果你還有耐心往下看下去的話,那我們就接著往下聊!




預知詳情,請看續集!
收藏收藏 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


lrc01 當前離線
UID
989269
熱心
51 值
嘉獎
0 次
違規
0 次
在線時間
9 小時
經驗
47 點
積分
47
精華
0
最後登錄
2010-7-30
閱讀權限
20
註冊時間
2008-8-19
論壇幣
95 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
lrc01 2009-3-15 22:26:15
謝謝提供一些基本常識~~~
回覆

使用道具 舉報

魔男狂者 當前離線
UID
1156698
熱心
45 值
嘉獎
0 次
違規
0 次
在線時間
8 小時
經驗
45 點
積分
45
精華
0
最後登錄
2009-4-1
閱讀權限
20
註冊時間
2009-3-19
論壇幣
5 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
魔男狂者 2009-3-19 12:28:07
多謝大大的無私分享,小弟也在學VB,有空一起交流一下.
回覆

使用道具 舉報

plume5270 當前離線
UID
938031
熱心
74 值
嘉獎
0 次
違規
0 次
在線時間
16 小時
經驗
74 點
積分
74
精華
0
最後登錄
2010-4-2
閱讀權限
20
註冊時間
2008-7-16
論壇幣
106 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
plume5270 2009-5-9 07:04:28
我再學 VB

可是有些變數看不太懂......

YCT64B
回覆

使用道具 舉報

jamany 當前離線
UID
653154
熱心
10 值
嘉獎
0 次
違規
0 次
在線時間
1 小時
經驗
10 點
積分
10
精華
0
最後登錄
2009-5-4
閱讀權限
10
註冊時間
2007-11-22
論壇幣
15 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 1
5
jamany 2009-6-4 18:27:40
感恩感恩感恩 推推推推推推推推
回覆

使用道具 舉報

s12134546 當前離線
UID
517949
熱心
107 值
嘉獎
0 次
違規
0 次
在線時間
69 小時
經驗
104 點
積分
104
精華
0
最後登錄
2011-4-19
閱讀權限
20
註冊時間
2007-8-27
論壇幣
1 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
6
s12134546 2009-7-22 15:51:55
還是 看不懂YCT51B YCT51B
回覆

使用道具 舉報

隨火 當前離線
UID
1294953
熱心
214 值
嘉獎
0 次
違規
0 次
在線時間
6 小時
經驗
14 點
積分
14
精華
0
最後登錄
2011-4-5
閱讀權限
10
註冊時間
2009-8-20
論壇幣
78 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 1
7
隨火 2009-9-1 09:52:54
太厲害了八
謝謝你熱情的教學無私的分享
使我敬佩百分
回覆

使用道具 舉報

sola1 該用戶已被刪除
8
sola1 2009-10-10 05:05:16
提示: 作者被禁止或刪除 內容自動屏蔽
回覆

使用道具 舉報

sola1 該用戶已被刪除
9
sola1 2009-10-10 05:06:47
提示: 作者被禁止或刪除 內容自動屏蔽
回覆

使用道具 舉報

xyz5431 當前離線
UID
296038
熱心
49 值
嘉獎
0 次
違規
0 次
在線時間
33 小時
經驗
37 點
積分
201
精華
0
最後登錄
2016-9-25
閱讀權限
25
註冊時間
2007-3-19
論壇幣
69 幣
聯合幣
18 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 3
10
xyz5431 2009-10-30 11:09:03
多謝樓主的無私分享,小弟對VB也再研究中,有空一起交流一下.
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

123下一頁

手機版 | Archiver | 外掛聯合國

GMT+8, 2024-11-23 02:00 , Processed in 0.075316 second(s), 16 queries , Memcache On.

版權說明:
  本站不會製作、經銷、代理外掛程式。僅免費提供外掛程式下載前之掃毒及掃木馬等安全檢測驗證,協助會員遠離盜號危險程式。本站所有資料均來自網際網路收集整理,說明文字暨下載連結轉載自原程 式開發站。站上出現之公司名稱、遊戲名稱、程式等,商標及著作權,均歸各公司及程式原創所有,本站程式所有權歸外掛聯合國所有。本程式所有權歸外掛聯合國所有.......

回頂部
第二步?
第三步?