国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

VB.net中HOOK的應用(一)

2024-07-10 13:00:44
字體:
來源:轉載
供稿:網友
本文不是講解hook原理的文章,僅是討論一下在vb.net如何調用hook功能,以及vb.net中api使用的變化問題。

由于hook種類較多,本文中以最常用的鍵盤hook為例進行分析。

一、先來看一下在vb中是如何實現的。截的是空格鍵。表現的目標是:一個form,上面有一個textbox,不管焦點是否落在textbox里,按空格鍵,不會在textbox中輸入一個空格,而是變成在textbox中寫入一句話:“hook成功!”

1.在一個module中寫入下列代碼:

調用的api的申明:

declare function setwindowshookex lib "user32" alias "setwindowshookexa" (byval idhook as long, byval lpfn as long, byval hmod as long, byval dwthreadid as long) as long

函數說明:本函數是用于啟動hook設置。

idhook是hook的類型,即處理的消息類型。

lpfn是hook子程(函數或過程)的地址指針。如果dwthreadid參數為0或是一個由別的進程創建的線程的標識,lpfn必須指向dll中的hook子程。除此以外,lpfn可以指向當前進程的一段hook子程代碼(我們利用的就是這個性質)。

hmod是應用程序實例的句柄,標識包含lpfn所指的子程的dll。如果dwthreadid 標識當前進程創建的一個線程,而且子程代碼位于當前進程,hmod必須為null。

dwthreadid是與安裝hook子程相關聯的線程的標識符,如果為0,hook子程與所有的線程關聯。 返回值:函數成功則返回hook子程的句柄,失敗返回null。


declare function unhookwindowshookex lib "user32" (byval hhook as long) as long

函數說明: 本函數是解除hook之用。hhook是hook函數的句柄。


declare function callnexthookex lib "user32" (byval hhook as long, byval ncode as long, byval wparam as long, lparam as any) as long

函數說明:本函數的作用是將當前hook鏈中的hook信息傳遞給下一個hook。

hhook是當前hook的句柄,一個應用程序接收這個句柄,作為先前調用setwindowshookex函數的結果。

ncode指的是傳遞到當前hook過程的hook代碼,下一個hook過程使用這段代碼去決定如何處理hook信息。

wparam指傳遞給當前hook過程的wparam值,它的具體含義是由當前hook鏈中的相關hook的類型決定的。

lparam指傳遞給當前hook過程的lparam值,它的具體含義是由當前hook鏈中的相關hook的類型決定的。


2. 定義的常量是:

public hnexthookproc as long

public const wh_keyboard = 2 ‘這個是表明hook的種類是鍵盤hook

public const pm_key_space = &h20 ‘空格鍵


3.代碼段

public sub unhookkbd()  ‘解鍵盤hook函數

if hnexthookproc <> 0 then

unhookwindowshookex hnexthookproc

hnexthookproc = 0

end if

end sub


public function enablekbdhook() ‘設置鍵盤hook

if hnexthookproc <> 0 then

exit function

end if

hnexthookproc = setwindowshookex(wh_keyboard, addressof _

mykbhfunc, app.hinstance, 0)

if hnexthookproc <> 0 then

enablekbdhook = hnexthookproc

end if

end function


public function mykbhfunc(byval icode as long, _

byval wparam as long, byval lparam as long) as long

mykbhfunc = 0

if icode < 0 then

mykbhfunc = callnexthookex(hnexthookproc, icode, wparam, lparam)

exit function

end if

if wparam = pm_key_space then ''偵測 有沒有按到空格鍵

mykbhfunc = 1

‘加入自己的代碼,用于表明響應

    form1.text1.text=”hook成功!”

end if

end function

4.在form中的代碼很簡單:

private sub form_load()

call enablekbdhook

end sub


private sub form_unload(cancel as integer)

call unhookkbd

end sub

打完收工!現在在form窗體狀態下,敲空格鍵,就會響應你在mykbhfunc函數中寫的代碼了。




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 杭锦旗| 江山市| 长治县| 无棣县| 兴城市| 昌都县| 漳平市| 平远县| 博罗县| 西安市| 涿鹿县| 太仓市| 衡东县| 河南省| 祥云县| 漳平市| 朝阳县| 吴旗县| 焉耆| 恩平市| 连平县| 五指山市| 赣州市| 彭水| 榆中县| 深泽县| 普洱| 图木舒克市| 海淀区| 财经| 鸡西市| 常熟市| 绥阳县| 凯里市| 肇东市| 武宁县| 曲周县| 三门县| 丹东市| 九龙城区| 沙雅县|