很簡單,你怎么不先問我,還在這提問。用api函數(shù),鉤子,設(shè)置成全局鉤子,然后對鉤取來的message消息不做處理,也不返回,這樣屏蔽了鍵盤了。鉤子函數(shù)api好像是什么hook的那個,還有鉤子函數(shù)的返回函數(shù),以整個自定義函數(shù)的指針作參數(shù)
站在用戶的角度思考問題,與客戶深入溝通,找到臨汾網(wǎng)站設(shè)計(jì)與臨汾網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋臨汾地區(qū)。
這是微軟MSDN官方文檔,里面詳細(xì)介紹了Hook機(jī)制,別告訴我你看不懂英文哦
(VS.85).aspx
我當(dāng)初自己研究Hook技術(shù)時就是看的這個
幾個重要的函數(shù):
// 安裝鉤子
HHOOK SetWindowsHookEx(int idHook, // 鉤子類型
HOOKPROC lpfn, // 回調(diào)函數(shù)
HINSTANCE hMod, // 實(shí)例句柄
DWORD dwThreadId // 線程ID
); // 返回值:鉤子句柄
// 將消息傳遞給下一個鉤子
LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam); // 太累了不想翻譯了
// 卸載鉤子
BOOL UnhookWindowsHookEx(HHOOK hhk);
// 鑒于你給的懸賞分太低,我就不多寫了,自己研究MSDN文檔吧,祝你好運(yùn)
// 順便再說一句,全局鉤子要在DLL中實(shí)現(xiàn)
/* 剛才看了你的資料,覺得你這人挺有意思,貌似VB.NET玩得不錯,哈哈 */
Windows的鉤子函數(shù)分兩種,一種是全局的,一種是線程的。全局的鉤子函數(shù)可以捕獲任何應(yīng)用程序的消息,但必須是標(biāo)準(zhǔn)的DLL才能實(shí)現(xiàn),VB做不了。VB可以實(shí)現(xiàn)線程的,就是當(dāng)前應(yīng)用程序的消息,這對鼠標(biāo)消息的捕捉有影響。
SetWindowsHookEx定義如下:
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
idHook是鉤子類型,如WH_KEYBOARD捕捉鍵盤消息,而WH_MOUSE捕捉鼠標(biāo)消息。hmod用于全局鉤子,VB要實(shí)現(xiàn)鉤子,必須設(shè)為0。dwThreadId用于線程鉤子VB中可以設(shè)置為App.ThreadID。lpfn為鉤子函數(shù),在VB中可以使用AddressOf獲得鉤子函數(shù)的地址。這個函數(shù)因?yàn)殂^子類型不同而有所不同。如鍵盤鉤子為:
Public Function KeyboardProc(ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
如果Code不為0,鉤子函數(shù)必須調(diào)用CallNextHookEx,將消息傳遞給下面的鉤子。wParam和lParam不是按鍵。
可以到這里看看: