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

首頁 > 編程 > .NET > 正文

vb.net如何調用Hook

2024-07-10 13:07:10
字體:
來源:轉載
供稿:網友
,歡迎訪問網頁設計愛好者web開發。
本文不是講解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函數中寫的代碼了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木萨尔县| 如皋市| 醴陵市| 龙岩市| 松滋市| 五莲县| 盱眙县| 阆中市| 图木舒克市| 黑山县| 汶上县| 淮安市| 科技| 灵丘县| 丰镇市| 曲阜市| 寿宁县| 都安| 黄石市| 甘孜| 高雄市| 永宁县| 泗阳县| 中超| 越西县| 射阳县| 怀化市| 奇台县| 宁津县| 大英县| 平南县| 攀枝花市| 当雄县| 志丹县| 白河县| 保德县| 万载县| 天等县| 平塘县| 恭城| 盐亭县|