鉤子其實就是呼叫一下api而已:
1、安裝鉤子:
setwindowshookex
函式原形:hhook setwindowshookex(
int idhook, // 鉤子型別,
hookproc lpfn, // 鉤子函式位址
instance hmod, // 鉤子所在的例項的控制代碼,
dword dwthreadid // 鉤子所監視的執行緒的執行緒號
) hmod: 對於線程式鉤子,引數傳null;
對於系統鉤子:引數為鉤子dll的控制代碼
dwthreadid:對於全域性鉤子,該引數為null。
鉤子型別用wh_callwndproc=4(傳送到視窗的訊息。由sendmessage觸發)
返回:成功:返回setwindowshookex返回所安裝的鉤子控制代碼;
失敗:null;
2、**,你要截獲訊息就在這裡進行:
lresult winapi myhookproc(
int ncode , // 指定是否需要處理該訊息
wparam wparam, // 包含該訊息的附加訊息
lparam lparam // 包含該訊息的附加訊息
)3、呼叫下乙個鉤子
lresult callnexthookex(
hhook hhk, // 是您自己的鉤子函式的控制代碼。用該控制代碼可以遍歷鉤子鏈
int ncode, // 把傳入的引數簡單傳給callnexthookex即可
wparam wparam, // 把傳入的引數簡單傳給callnexthookex即可
lparam lparam // 把傳入的引數簡單傳給callnexthookex即可
);4、用完後記得解除安裝鉤子哦,要不然你的系統會變得奇慢無比!
bool unhookwindowshookex(
hhook hhk // 要解除安裝的鉤子控制代碼。
)把上面這些api用c#封裝一下,就可以直接用了!
給個執行緒鉤子的例子吧(兩個form都在同乙個執行緒中執行):
using
system.runtime.interopservices;
public class form1 : system.windows.forms.form
//開始攔截
private bool starthook()
//停止攔截
private bool stophook()
//鉤子處理函式,在這裡攔截訊息並做處理
private int myhookproc(int code, intptr wparam, ref cwpstruct cwp)
break;
}return callnexthookex(hookhandle,code,wparam, ref cwp);
}[structlayout(layoutkind.sequential)]
public struct cwpstruct
}public class form2 : system.windows.forms.form
C 鉤子本執行緒內訊息攔截
鉤子其實就是呼叫一下api而已 1 安裝鉤子 setwindowshookex 函式原形 hhook setwindowshookex int idhook,鉤子型別,hookproc lpfn,鉤子函式位址 instance hmod,鉤子所在的例項的控制代碼,dword dwthreadid 鉤...
C 鉤子本執行緒內訊息攔截
選擇自 xdev 的 blog 關鍵字 引用 c 鉤子本執行緒內訊息攔截 出處http blog.csdn.yiruoyun archive 2004 10 17 140219.aspx 鉤子其實就是呼叫一下api而已 1 安裝鉤子 setwindowshookex 函式原形 hhook setwi...
C 鉤子本執行緒內訊息攔截
鉤子其實就是呼叫一下api而已 1 安裝鉤子 setwindowshookex 函式原形 hhook setwindowshookex int idhook,鉤子型別,hookproc lpfn,鉤子函式位址 instance hmod,鉤子所在的例項的控制代碼,dword dwthreadid 鉤...