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

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

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

四、如何慢慢提升自己的API功力?

    何為API功力?其實沒必要搞那麼清楚,首先需要搞明白的就是,你應該知道在什麼環境下使用什麼API,實現哪些功能應該使用哪些API!這才是我們需要的。

1,試著自己從小程式開始寫起。

    寫小程式?對!在你寫小程式時應該揀你最感興趣的程式寫,否則有可能你寫到一半以後會覺得自己這個程式寫得毫無價值,簡直是在浪費時間,最後到頭來還是功虧一簣。這塈畬酗偵繴篳D材呢?我在這堣]想了很久,最後還是決定選擇一個登出Windows程式來做題材

    註銷Windows也就是退出Windows,根據表面意思在API流覽器中輸入Exit(退出)Windows,看看有沒有這個API?這奡ˋ穭@下,你在查找這個API的時候還會看到Exi●綜合木馬網站●ont=新細明體]這個API,其實這兩個API實現的功能一樣,前者是用在16位元作業系統上,只不過在Win32位元作業系統上一般都使用Exi●綜合木馬網站●ont=新細明體]。所以這奡N使用後者。API見以下:

  Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

    看看堶悸漕潃荌捊ヾAByVal uFlags As Long?這塈畯抳搨n傳入一個整形數位,可是應該傳入什麼數字呢?這婸﹞U,API中的參數可以傳入不同的值,不同的值從而導致產生不同的結果。分析API中參數應該傳遞哪些值其實是有技巧的,以後大家只要是看到參數字元中包函Flags字元的話那就說明該參數可以被傳入一個或多個標誌,並且大部分都是傳入API常數(什麼是API常數就不用我說了吧)。說白話點,就是我們可以傳入多個API常量,並且可以在API流覽器中找到,當然,不一定所有的API常數都可以在API流覽器中找到,不過大部分都可以。

  API流覽器查API常量時我前面就教過大家技巧,現在該是我們實踐的時候了,分析如下:


Exit
:頭一個大寫字元 E


Windows
:頭一個大寫字元 W


Ex
:頭一個大寫字元 E

  組合  EWE_
  
好了,現在在API流覽器的中常數中找找,咦?發現好像沒有以EWE開頭的常數??只發現以EWX開頭的?現在先別著急,咱們回過頭來再分析下,咱們是失敗在最後一步Ex上,這塈琱ㄠo不否決我前面教過大家的技巧,但是又不能完全否決,出現這種情況時就需要大家靈活運用API常數的分析法,可以看到EWX最後一個X是以ExX作結尾的,以這種方法做API常數開頭的不止這一個,所以這塈痧S意留了一個陷阱,希望給大家帶來一些經驗將來能夠靈活運用。現在我把關機uFlags所能用到的相關常數發上來,如下:

  
Private Const EWX_FORCE = 4


Private Const EWX_LOGOFF = 0


Private Const EWX_REBOOT = 2


Private Const EWX_SHUTDOWN = 1




EWX_FORCE
前面的 EWX_ 我就不說了,關鍵是看 _ 符號後面的,Force 單詞翻譯:強制,強迫。人工在翻譯一下,意思是說:強制執行ExitWindowsEx API關機函數。不知道這樣解釋你能不能明白。那到底這個常數有什麼用呢?這塈畯怚回憶一下以前關機的時候,當Windows無法關閉某些視窗的時候就停止繼續關機了,最後還得把無法關閉的視窗手動關閉方可,現在,如果我們使用這個常數進行關機,那Windows不管你視窗能不能關閉,直接強制關閉。希望你懂了。

  

EWX_LOGOFF
這個嘛,貌似組合單詞,不可直接翻譯,那樣就不是那個意思了。Logout Off,是這樣寫嗎?註銷的意思。

  

EWX_REBOOT
不浪費時間了,直接說明意思:重新啟動。

  

EWX_SHU●綜合木馬網站●ont=新細明體]關機。


   
    至於第二個ByVal dwReserved As Long,為保留整形,一般為0即可。至於為什麼為0,大家可以到網上下載一些專門講解API函數的電子書看看,堶惘酗j部分API函數的詳細講解。或者下載VS.MSDN看看,在MSDN中說Windows 2000/95/98/Me中此參數忽略,XP中是指定關機消息說明。

  
    最後看看這個APIFunction聲明,說明該函數有返回值,返回值為LongMSDN中說:如果執行成功,則返回非零,否則為零。

  
    現在上面已經把這個關機API和相關參數常量都給你分析透了,你可別告訴我你還不知道怎麼寫?好了,這塈畯怜竣@個定時登出程式,呵呵,雖然很簡單,不過很多時候用得上哦!在Form視窗上添加Timer控制項,Interval 設置為1000Enabled 設置為 True。好了,代碼如下:

  

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long


Private Const EWX_LOGOFF = 0


Private Sub Timer1_Timer()


Static i As Integer

   

i = i + 1

   

Me.Caption = i '
這一步純粹是想看看當前已經執行到幾秒了?可不要

   

If i = 10 Then '
秒數判斷,可以根據自己的需要進行運算



ExitWindowsEx EWX_LOGOFF, 0


End If


End Sub


  
    其實我都有點不想分析了,不過為了照顧大眾,不得不說下,Static i As Integer 靜態變數(問:啥叫靜態變數?答:我暈!)i = i + 1是每執行Timer一次i就加1,Timerinterval設置為10001000為一秒,2000為二秒。。。。後面一個If i = 10 Then是判斷當i=10以後,也就是10秒,就執行註銷,這個時候你可別忘了保存好你的其他沒有保存的檔哦,如果沒保存資料丟失的話偶不承擔任何法律責任的。其實這塈畯怚i以自己做一個,如可以寫成這樣:ExitWindowsEx EWX_LOGOFF Or EWX_FORCE, 0,其中用了Or運算,整體的意思是強制Windows註銷。這樣理解就夠了,只要能讓你明白。

  
    現在我又要說一下了,不說不行的!就是在API中使用 Or 運算,關於Or運算符VB書中都有詳細解釋的,別告訴我你沒看?沒看馬上去看!上面EWX_LOGOFF Or EWX_FORCE 的使用是把 註銷 強制 進行Or位運算,對兩個數值執行按位析取,這堹A及到二進位運算,說多了你可能不明白,我就說簡單點的吧,以後如果你想組合兩個API常數的功能,一般都是用 Or 進行運行的。如上面寫的。

  
    好了,保存其他文件,然後F5運行之,看著Form標題的數字慢慢添加,當為10時,Windows開始註銷。。。

  
    小提示:在使用EWX_SHU●綜合木馬網站●ont=新細明體]的時候你可能會感覺沒有作用,主要是NT系統的安全性提高,需要用其他API進行提升自己的許可權才可以。關於如何提升應用程式許可權請百度一下。

  

2,
先從一些最簡單的API開始


  
    無疑自己試著寫程式是最好的提升方法,學完一些知識以後自己試著寫寫,這樣能讓你理解的更快更好,好了不說廢話了,接著往下看。

  
    最簡單的API,呵呵,哪些最簡單呢?這個我也說不好,這樣吧,咱們就從Get(獲取)開始,那Get什麼呢?Window(視窗),還是從視窗下手吧,這樣更接近我們日常的編程,誰叫這是一個Windows作業系統呢?先列幾個常用的API

  

Ge●綜合木馬網站●ont=新細明體]、
Ge●綜合木馬網站●ont=新細明體]、GetWindowLongGetWindowRectGe●綜合木馬網站●ont=新細明體]、GetWindowsDirectoryGetWindowTextGetWindowThreadProcessId

  
還有很多,我就先列舉幾個簡單點的,咱們就從這幾個中間隨便抽幾個來講講吧。

  先從GetWindowText下手,大家就表面的意思進行理解下,Get(獲取)Window(視窗)Text(文本)Very Good!這個API以前不錯的,可以獲取密碼框中的密碼,呵呵,說到這堙A我估計有些人開始興奮起來了!那好,Follow Me!

  
    新建一個Form視窗,然後添加一個CommandButtonCaption設置為:顯示密碼。接著添加兩個TextBoxText1屬性設置:PasswordChar=*;Text=123456789Text2的屬性基本上沒有什麼需要設置的,只需要把Text屬性為空就可以了,它主要是用來幫助咱們顯示出密碼的。好了,在Form1代碼框中填入以下代碼:

  

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Private Sub Command1_Click()


Dim sBuffer As String

   

sBuffer = Space(255)


GetWindowText Text1.hwnd, sBuffer, 255

   

Text2.Text = sBuffer


End Sub


  

OK
F5運行,點擊Command1,怎麼樣?Text1中的密碼字元顯示在Text2中了吧?你可以再更改下Text1中的密碼,然後再點擊Command1試試。也許你覺得會多此一舉,為何不Text2.Text=Text1.Text這樣?如果真的這樣的話看似簡單,那你就學不到API了。


  
    又到了開始分析的時候了,打起精神來,先看第一句:Dim sBuffer As String,不用說,聲明一個字串變數唄!接著看第二句:sBuffer = Space(255) 那這一句呢?有些人可能不知道了,沒事,我會仔細講的。SpaceVB內置的字串處理函數,VB中的幫助檔中有說明:
  
  
  開始{
  
  本示例使用 Space 函數來生成一個字串,字串的內容為空格,長度為指定的長度。

Dim MyString


'
返回 10 個空格的字串。


MyString = Space(10)


'
10 個空格插入兩個字串中間。


MyString = "Hello" & Space(10) & "World"

  
  }結束

很顯然,我這一句是要分配255個空格字串記憶體,為啥要用分配?這都是為後面所要用到打定的基礎。接著往下:

  

GetWindowText Text1.hwnd, sBuffer, 255
這一步是關鍵,通過它來獲取咱們想要的視窗文本,看第一個參數,我前面講過hwnd一般都是需要傳入控制碼的,這時咱們傳入了Text1.hwnd(Text1控制項的控制碼),第二個參數,lpSting為字串變數,所以這堳平抾リJsBuffer字串變數。最後一個cchLong整形,所以理應傳入數字,這塈畯抾リJ了255。現在又有人想問了,為什麼需要這麼傳入值?貌似和以前的傳入不一樣?確實!一剛開始你可能搞不懂,這時候我先講講大概的意思,我們用GetWindowText來獲取視窗中的文本,當獲取成功以後,理所當然會返回視窗中的字串,但是當我們用這個API進行獲取時,必須需要一個緩衝來保存我們所獲取的字串,你如果不信去試試把sBuffer = Space(255)去掉,後面的255其實就是告訴這個API我們緩衝字串的大小,這埵A告訴大家一個技巧,以後只要是看見包函有cch字元時,大部分都是輸入相關類型的大小。

  

    再附加一點,就塈睇★L,hwnd是用來傳控制碼的,你也可以傳入其他視窗控制碼,只要其他視窗有文本,都是可以通過這個API獲取的。還有Text2.Text = sBuffer其實是可以先把sBuffer處理一下再傳給Text2.Text的,關於字串處理這堣講。

  
    好了,分析結束,來個小提示:在Windows作業系統中,任何有控制碼的東東都可被看作為一個視窗。另外你可能會去試試QQ的密碼框,^_^ 這塈畯n告訴你一下,無法成功,為什麼無法成功呢?這是一個技術問題目前不提!

  
    接著再來試試GetWindowsDirectory,大家看表面意思吧!Get(獲取)Windows(就是Windows目錄)Directory(目錄),也就是獲取咱們那個系統目錄,如:C:\Windows。可能我的Windows目錄中在C盤,而其他人的可能在D盤、E盤也說不定,所以有的時候軟體需要這個API進行獲取作業系統具體的Windows目錄。

  
    好了,還是新建一個標準EXE,添加一個CommandButton,屬性Caption=顯示Windows目錄,OK,寫入以下代碼:

  

Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long


Private Sub Command1_Click()


Dim sBuffer As String

   

sBuffer = Space(255)


GetWindowsDirectory sBuffer, 255


MsgBox "Windows
目錄在: " & sBuffer


End Sub

  

    分析!第一個Dim sBuffer As String字串變數,sBuffer = Space(255)緩衝字串,GetWindowsDirectory sBuffer, 255這個和上面所講的一樣,最後一個參數nSizeLong整形,所以傳入數值,那傳入什麼數值呢?Size???當然是緩衝字串大小了,以後遇到這個nSize一般也是傳入相關類型的大小的。MsgBox "Windows目錄在: " & sBuffer,是用MsgBox訊息方塊顯示出Windows目錄的位置。

  

OK
,恭喜你,你又會使用了一個API,還要繼續嗎?


  
收藏收藏 分享分享 讚 幹 分享分享 FB分享
回覆

使用道具 舉報


may05005 當前離線
UID
1208553
熱心
42 值
嘉獎
0 次
違規
0 次
在線時間
15 小時
經驗
32 點
積分
146
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2009-5-7
論壇幣
50 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
may05005 2009-5-12 16:33:24
研讀中 感謝大大的分享!!
回覆

使用道具 舉報

iiiiaaa 當前離線
UID
950079
熱心
89 值
嘉獎
0 次
違規
0 次
在線時間
22 小時
經驗
87 點
積分
198
精華
0
最後登錄
2015-11-14
閱讀權限
20
註冊時間
2008-7-24
論壇幣
211 幣
聯合幣
4 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
iiiiaaa 2009-5-15 21:42:21
慢慢加深自己的實力中~多謝大大的教學!YCT65B
回覆

使用道具 舉報

Trunone 當前離線
UID
915268
熱心
17 值
嘉獎
0 次
違規
0 次
在線時間
27 小時
經驗
13 點
積分
335
精華
0
最後登錄
2018-8-6
閱讀權限
25
註冊時間
2008-7-2
論壇幣
272 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 3
Trunone 2009-6-20 11:35:16
謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝
謝謝謝謝謝謝 謝謝謝謝謝謝謝謝謝謝謝謝 謝謝謝  謝謝謝謝謝
謝謝謝謝謝謝    謝謝謝謝謝謝謝謝謝 謝謝謝謝 謝謝謝謝謝
謝謝謝謝謝   謝謝謝謝謝謝謝謝謝謝謝 謝謝謝謝  謝謝謝謝
謝謝謝謝  謝謝謝謝謝謝謝謝謝謝謝謝謝謝 謝   謝謝 謝謝
謝謝  謝 謝謝謝謝謝謝謝謝謝謝謝謝  謝謝謝 謝謝   謝
謝謝謝謝謝 謝謝謝謝謝謝謝謝謝謝謝   謝謝謝   謝謝謝謝
謝謝謝謝   謝謝謝謝謝謝謝謝謝謝謝謝 謝  謝 謝謝謝謝謝
謝謝謝謝謝謝謝 謝謝謝謝謝謝謝謝謝謝謝  謝  謝   謝謝
謝謝   謝  謝謝謝謝謝謝謝謝謝謝謝 謝謝謝謝  謝謝謝謝
謝 謝謝   謝謝謝謝謝謝謝謝謝謝   謝   謝 謝謝謝謝
謝謝謝謝謝  謝謝謝謝謝謝謝謝謝謝 謝  謝謝 謝 謝謝謝謝
謝謝謝謝    謝謝謝謝謝謝謝謝 謝謝 謝謝謝謝謝 謝謝謝謝
謝謝謝  謝謝   謝謝謝謝謝謝 謝  謝謝 謝謝 謝謝謝謝
謝   謝謝謝謝推   謝謝謝謝謝謝謝 謝謝謝   謝謝謝謝
謝謝謝謝謝謝謝謝謝謝   謝謝謝謝謝謝謝謝謝謝謝 謝謝謝謝謝
謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝
回覆

使用道具 舉報

yaochester 當前離線
UID
1364547
熱心
43 值
嘉獎
0 次
違規
0 次
在線時間
8 小時
經驗
47 點
積分
47
精華
0
最後登錄
2009-12-14
閱讀權限
20
註冊時間
2009-12-3
論壇幣
96 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
5
yaochester 2009-12-7 14:45:57
這位大大努力加油 , 我會支持你的. 謝謝 !
回覆

使用道具 舉報

kaiben1234 當前離線
UID
1333463
熱心
49 值
嘉獎
0 次
違規
0 次
在線時間
28 小時
經驗
46 點
積分
46
精華
0
最後登錄
2013-10-16
閱讀權限
20
註冊時間
2009-10-18
論壇幣
120 幣
聯合幣
1 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
6
kaiben1234 2009-12-7 18:15:21
我要賜教....(睇)睇睇~_~!!!!!!!!!!!!!!!!!!!!!!!!!!
回覆

使用道具 舉報

blackm28 該用戶已被刪除
7
blackm28 2010-1-13 14:00:15
提示: 作者被禁止或刪除 內容自動屏蔽
回覆

使用道具 舉報

sammyiannie 當前離線
UID
632864
熱心
18 值
嘉獎
0 次
違規
0 次
在線時間
7 小時
經驗
14 點
積分
64
精華
0
最後登錄
2018-8-6
閱讀權限
20
註冊時間
2007-11-8
論壇幣
19 幣
聯合幣
6 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
8
sammyiannie 2010-8-26 11:28:08
看完前面幾回也實作程式成就感一個個接著來xD
回覆

使用道具 舉報

include423 該用戶已被刪除
9
include423 2010-9-9 18:41:19
提示: 作者被禁止或刪除 內容自動屏蔽
回覆

使用道具 舉報

aragornkkbox 當前離線
UID
1392877
熱心
33 值
嘉獎
0 次
違規
0 次
在線時間
23 小時
經驗
33 點
積分
33
精華
0
最後登錄
2011-10-19
閱讀權限
20
註冊時間
2010-1-20
論壇幣
153 幣
聯合幣
0 枚
幸運鑽
0 顆
招待卷
0 點
查看詳細資料
Rank: 2Rank: 2
10
aragornkkbox 2010-11-1 22:50:11
實在太感謝了 ,功力逐漸增加中YCT47B
回覆

使用道具 舉報

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

12下一頁

手機版 | Archiver | 外掛聯合國

GMT+8, 2024-4-29 09:45 , Processed in 0.066286 second(s), 15 queries , Memcache On.

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

回頂部
第二步?
第三步?