亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Visual Basic > 正文

VB編程中鉤子的實現及應用

2023-06-12 12:11:30
字體:
來源:轉載
供稿:網友

Windows系統中鉤子具有相當強大的功能,通過這種技術可以對幾乎所有的Windows 系統中的消息進行攔截、監視、處理。這種技術可以廣泛應用于各種軟件,尤其是需要有監控、自動記錄等對系統進行監測功能的軟件。本文針對這個專題進行了探討,希望可以為讀者朋友們起到拋磚引玉的作用。

一、鉤子的機制及類型

Windows的應用程序都是基于消息驅動的,應用程序的操作都依賴于它所得到的消息的類型及內容。鉤子與Dos中斷截獲處理機制有類似之處。鉤子(Hook)是Windows消息處理機制的一個平臺,通過安裝各種鉤子,應用程序可以在上面設置子程序以監視指定窗口的某種消息,并且當消息到達目標窗口之前處理它。

在Windows中,鉤子有兩種,一種是系統鉤子(RemoteHook),它對消息的監視是整個系統范圍,另一種是線程鉤子(LocalHook),它的攔截范圍只有進程內部的消息。對于系統鉤子,其鉤子函數(HookFunction)應在Windows系統的動態鏈接庫(DLL)中實現,而對于線程鉤子來說,鉤子函數可以在DLL之中實現,也可以在相應的應用程序之中實現。這是因為當開發人員創建一個鉤子時,Windows先在系統內存中創建一個數據結構,該數據結構包含了鉤子的相關信息,然后把該結構體加到已經存在的鉤子鏈表中去,并且新的鉤子將排在老的鉤子的前面。當一個事件發生時,如果安裝的是一個局部鉤子,當前進程中的鉤子函數將被調用。如果是一個遠程鉤子,系統就必須把鉤子函數插入到其它進程的地址空間,要做到這一點就要求鉤子函數必須在一個動態鏈接庫中,所以如果想要使用遠程鉤子,就必須把該鉤子函數放到動態鏈接庫中去。對于鉤子所監視的消息類型來說,Windws一共提供了如下幾種類型:如表1所示:

表一、Windows消息類型

消息類型常量標識

消息類型

適用范圍

WH_CALLWNDPROC

4

發給窗口的消息

線程或系統

WH_CALLWNDPROCRET

12

窗口返回的消息

線程或系統

WH_CBT

5

窗口變化、焦點設定等消息

線程或系統

WH_DEBUG

9

是否執行其它HookHook

線程或系統

WH_FOREGROUNDIDLE

11

前臺程序空閑

線程或系統

WH_GETMESSAGE

3

投放至消息隊列中的消息

線程或系統

WH_JOURNALPLAYBACK

1

將所記載的消息進行回放

系統

WH_JOURNALRECORD

0

監視并記錄輸入消息

系統

WH_KEYBOARD

2

鍵盤消息

線程或系統

WH_MOUSE

7

鼠標消息

線程或系統

WH_MSGFILTER

-1

菜單滾動條、對話框消息

線程或系統

WH_SHELL

10

外殼程序的消息

線程或系統

WH_SYSMSGFILTER

6

所有線程的菜單滾動條、對話框消息

系統

 

 

 二、VB編程中鉤子的實現

 ?。ㄒ唬┿^子函數(HOOK Function)的格式。Hook Function實際上是一個函數,如果是系統鉤子,該函數必須放在動態鏈接庫中。該函數有一定的參數格式,在VB中如下:

Private Function HookFunc(ByVal nCode As Long,ByVal wParam As LongByVal lParam As Long)As Long


  其中,nCode代表是什么情況之下所產生的鉤子,隨鉤子的不同而有不同組的可能值;參數wParam,lParam傳回值包括了所監視到的消息內容,它隨Hook所監視消息的種類和nCode的值不同而不同。對于用VB所設置的鉤子函數,一般的框架形式如下:

 

Private Function HookFunc(ByVal nCode As Long,ByVal wParam As Long,ByVal lParam As Long)As Long
 
Select case of nCode
  case ncode<0:hookfunc=callnexthookex(hHookFuncnCode,wParam,
lParam)
  case1:處理過程
1:HookFunc=X1
  case2:處理過程
2:HookFunc=X1
  ……

 end select
end Function


  函數的傳回值,如果消息要被處理,則傳0,否則傳1,吃掉消息。

  (二)鉤子的安裝及執行。鉤子的安裝要用到幾個API函數:可以使用API函數SetWindowsHookEx()把一個應用程序定義的鉤子子程安裝到鉤子鏈表中。SetWindowsHookEx()函數的聲明如下:

 

Declare function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA"(ByVal idHook As LongByVal lpfn As Long,ByVal hmod As Long,ByVal dwThreadId As Long)As Long


  idHook值為它處理的消息類型;lpfn值為鉤子子程序的地址指針。如果dwThreadId參數為0或是一個由別的進程創建的線程的標識,lpfn必須指向DLL中的鉤子子程。除此以外,lpfn可以指向當前進程的一段鉤子子程代碼。hMod值為應用程序的句柄,標識包含lpfn所指的子程的DLL。如果dwThreadId標識當前進程創建的一個線程,而且子程代碼位于當前進程,hMod必須為0dwThreadId值為與安裝的鉤子子程相關聯的線程的標識符,如果為0,鉤子子程與所有的線程關聯。鉤子安裝成功則返回鉤子子程的句柄,失敗返回0。

  另外,一般應在鉤子子程中調用CallNextHookEx()函數以執行鉤子鏈表所指的下一個鉤子子程,否則安裝了別的鉤子的應用程序就會收不到鉤子通知,從而產生錯誤的結果。CallNextHookEx()函數的聲明如下:

 

Declare Function CallNextHookEx Lib"user32" Alias "CallNextHookEx"(ByVal hHook As LongByVal ncode As Lonog, ByVal wParam As LonglParam As Any)As Long


  hHook值是SetWindowsHookEx()的傳回值,nCode、wParamlParam則是Hook函數中的三個參數。在程序終止之前,必須調用UnhookWindowsHookEx()函數釋放與鉤子關聯的系統資源。UnhookWindowsEx()函數聲明如下:

 

Declare Function Unhook WindowsHookEx Lib "user32" Alias "Unhook WindowsHookEx(ByVal hHook As Long)As Long


  hHook為安裝鉤子時的返回值,即鉤子子程的句柄。

  (三)VB中鉤子安裝應注意的問題。lpfn參數是一個HookFunc的地址,VB規定必須將HookFunc代碼放到標準的.BAS模塊中,并以"Address Of HookFunc"傳入,而不可以將其放到類模塊中,也不能將其附加到窗體上。而對于RemoteHook來說,HookFunc應包含在動態鏈接庫中,因此如果在VB中使用RemoteHook,則還要用到GetModuleHandle()、GetProcAddress()兩個API函數,它們的聲明如下:

 

Declare Function GetModuleHandle Lib"kernel32" Alias "GetModuleHandleA"ByVal lpModuleName As StringAs Long
Declare Function GetProcAddress Lib "kernel32" Alias "GetProcAddress"
ByVal hModule As LongByVal lpProcName As StringAs Long


  hmod值是含鉤子過程的模塊名柄,如果是LocalHook,該值可以是Null(VB中傳0),而如果是RemoteHook,則可以使用GetModuleHandle("名稱.dll")來傳入。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线中文字幕| 午夜精品久久久久久久99黑人| 日韩欧美福利视频| 中文字幕亚洲精品| 日韩免费观看网站| 日本午夜在线亚洲.国产| 国产在线精品播放| 国模精品一区二区三区色天香| 欧美主播福利视频| 91亚洲精品久久久久久久久久久久| 国产又爽又黄的激情精品视频| 日韩高清电影免费观看完整版| 亚洲精品国产品国语在线| 97精品久久久中文字幕免费| 国产精品中文字幕在线观看| 福利精品视频在线| 久久久国产精品视频| 亚洲精品一区在线观看香蕉| 91香蕉嫩草影院入口| 亚洲欧洲国产一区| 国产精品久久久久久一区二区| 久久成人人人人精品欧| 海角国产乱辈乱精品视频| 国产精品日韩久久久久| 在线免费观看羞羞视频一区二区| 国产成人在线亚洲欧美| 国产欧美日韩综合精品| 91成人精品网站| 国产精品激情av在线播放| 国产精品人人做人人爽| 奇米成人av国产一区二区三区| 国产精品a久久久久久| 久久免费视频观看| 日本道色综合久久影院| 伊人伊成久久人综合网站| 国产美女久久精品香蕉69| 国产精品欧美激情| 久久精品美女视频网站| 九九热视频这里只有精品| 欧美日韩亚洲91| 97国产精品免费视频| 国产成人精品综合久久久| 欧美日韩综合视频网址| 日本91av在线播放| 久久久久久一区二区三区| 精品久久久国产精品999| 国产精品久久久久久久av电影| 国产精品一久久香蕉国产线看观看| 麻豆一区二区在线观看| 亚洲网站在线播放| 亚洲乱亚洲乱妇无码| 在线观看不卡av| 亚洲第一精品自拍| 亚洲欧美国产精品va在线观看| 日本一区二区三区四区视频| 中文字幕一区电影| 日韩精品小视频| 欧美另类暴力丝袜| 91色琪琪电影亚洲精品久久| 97不卡在线视频| 亚洲一区二区三区在线视频| 欧美成人免费在线观看| 91av免费观看91av精品在线| 亚洲国产精品va在线看黑人动漫| 日韩色av导航| 日韩在线免费高清视频| 欧美成人午夜剧场免费观看| 国产日韩视频在线观看| 日韩高清人体午夜| 亚洲品质视频自拍网| 91在线高清免费观看| 日韩av电影在线播放| 国产精品96久久久久久又黄又硬| 国产原创欧美精品| 日韩成人激情视频| 亚洲电影免费观看高清完整版在线观看| 日韩精品一二三四区| 国产精品视频资源| 欧美成人精品h版在线观看| 亚洲人午夜色婷婷| 深夜福利一区二区| 中国日韩欧美久久久久久久久| 疯狂蹂躏欧美一区二区精品| 亚洲www在线| 国产精品99久久久久久白浆小说| 国产在线视频2019最新视频| 国产精品久久久久久久久男| 精品无人区乱码1区2区3区在线| 午夜精品国产精品大乳美女| 91久久久久久久久久久| 亚洲高清色综合| 亚洲色在线视频| 亚洲人成电影网| 成人午夜在线影院| 欧美理论电影网| 国产成人亚洲综合青青| 91麻豆国产语对白在线观看| 亚洲色图五月天| 91精品国产色综合久久不卡98| 国产精品成人播放| 2019中文字幕在线免费观看| 成人免费看吃奶视频网站| 亚洲国产成人在线播放| 一本色道久久综合亚洲精品小说| 亚洲精品国产精品自产a区红杏吧| 8x海外华人永久免费日韩内陆视频| 日韩电影免费在线观看中文字幕| 黑人巨大精品欧美一区二区| 中文字幕精品一区久久久久| www.久久撸.com| 在线日韩日本国产亚洲| 欧美午夜美女看片| 久久久伊人日本| 国产精品视频资源| 国产精品一区二区性色av| 日韩av一区在线观看| 精品偷拍一区二区三区在线看| 欧美日韩亚洲网| 成人精品一区二区三区电影免费| 精品二区三区线观看| 欧美性jizz18性欧美| 国产一区二区久久精品| 国产a∨精品一区二区三区不卡| 秋霞成人午夜鲁丝一区二区三区| 亚洲乱码av中文一区二区| 亚洲精品国产精品国自产在线| 亚洲精品aⅴ中文字幕乱码| 91中文字幕在线观看| 国产精品久久久久久久久免费看| 欧美一乱一性一交一视频| 成人写真视频福利网| 国产欧美一区二区三区在线| 欧美亚洲免费电影| 91黄色8090| 中文字幕日韩在线视频| 亚洲片在线资源| 欧洲亚洲免费在线| 亚洲视频777| 亚洲伊人成综合成人网| 日本成人激情视频| 精品偷拍一区二区三区在线看| 日本三级韩国三级久久| 91精品国产乱码久久久久久久久| 91视频免费在线| yw.139尤物在线精品视频| 91视频-88av| 欧美亚洲国产视频小说| 欧美成人免费在线观看| 北条麻妃久久精品| 久久97久久97精品免视看| 亚洲国产欧美久久| 精品欧美国产一区二区三区| 精品成人69xx.xyz| 黑丝美女久久久| 成人黄在线观看| 精品视频在线观看日韩| 日本久久久久久久久久久| 久久精品视频va| 亚洲精品小视频| 亚洲日本aⅴ片在线观看香蕉| 丝袜情趣国产精品| 亚洲成人精品av| 色狠狠久久aa北条麻妃| 欧美亚州一区二区三区|