wince中的hook 鉤子 用法

2021-05-04 13:42:08 字數 1738 閱讀 4887

hook(鉤子)是一種在訊息到達目標視窗前進行截獲的技術。使用鉤子主要使用以下三個函式setwindowshookex:建立鉤子

callnexthookex:將訊息傳給鉤子鏈中的下乙個鉤子

unhookwindowshookex:釋放鉤子

對於建立鉤子的函式setwindowshookex,msdn給出其原形如下:

這些在windows上面使用沒有問題,但是在說明的最後,關於平台限制的地方,可以清楚的看到以下文字:windows ce: unsupported.

也就是說,wince並不支援鉤子。

但是是不是不支援呢?只能說不直接支援鉤子,用別的方法也是可以使用鉤子函式的,那就是直接獲取鉤子函式位址,然後呼叫的方法。

g_hhookapidll = loadlibrary(_t("coredll.dll"));

setwindowshookex = (_setwindowshookexw)getprocaddress(g_hhookapidll, _t("setwindowshookexw"));

如法炮製,可以獲得其他兩個函式的位址,有了這三個函式的位址,就可以類似這樣使用了:

g_hinstalledllkbdhook = setwindowshookex(wh_keyboard_ll, keyboardproc, hinstance, 0);

關於wince的鉤子,有以下總結,不盡不對之處,請給飛狐指正:

1 參看wince的winbase.h,wince下可以使用以下三種:

#define wh_journalrecord 0

#define wh_journalplayback 1

#define wh_keyboard_ll 20

其中最有用的就是鍵盤鉤子了。wince裡面定義其為20,而不是windows裡面的14,因此呼叫時要注意。

2 關於鍵盤鉤子**函式keyboardproc,它裡面的幾個引數並不像msdn裡面提到的keyboardproc那樣:

lresult callback keyboardproc(

int code,       // hook code

wparam wparam,  // virtual-key code

lparam lparam   // keystroke-message information

按照說明,wparam應該存的是虛擬鍵資訊。然而事實上,這三個函式中,第二個是用來指示是鍵按下還是彈起,第三個引數lparam才是真正儲存的按鍵資訊資料。它儲存的是乙個kbdllhookstruct結構體指標。這個結構體定義如下:

typedef struct kbdllhookstruct;

結構體裡面才是真正的按鍵資訊。

3對於鍵盤鉤子,我只能使用乙個,如果建立二個鉤子來檢測(不管是使用同乙個dll,還是兩個不同的dll),則第乙個可以正常工作,但是第二個會報錯,錯誤id是31 error_gen_failure即

a device attached to the system is not functioning.

不知道哪位高手有解決方案?

4 鉤子有執行緒級和全域性鉤子,但是我只試驗成功了全域性鉤子,工作很好,但是執行緒級鉤子還沒有成功。

5 鉤子用途很多,我們就用它和驅動打交道,具體也不多說了。

鉤子函式源**在採用codeproject**上面prathamesh s kulkarni的源**基礎上,增加了處理按鍵訊息的部分,**比較長,就不貼了,有需要的可以交流,或者參看prathamesh s kulkarni的文章。

js中的鉤子機制 hook

什麼是鉤子機制?使用鉤子機制有什麼好處?鉤子機制也叫hook機制,或者你可以把它理解成一種匹配機制,就是我們在 中設定一些鉤子,然後程式執行時自動去匹配這些鉤子 這樣做的好處就是提高了程式的執行效率,減少了if else 的使用同事優化 結構。由於js是單執行緒的程式語言,所以程式的執行效率在前端開...

php中鉤子hook的實現原理

鉤子定義鉤子是程式設計裡乙個常見概念,非常的重要。它使得系統變得非常容易拓展,而不用理解其內部的實現機理,這樣可以減少很多任務作量 鉤子作用 鉤子函式可以截獲並處理其他應用程式的訊息。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處...

鉤子 HOOK 機制的使用

wh mouse,gethookinfo,hinstance,getcurrentthreadid mymousehook.callbackfun callbackf mymousehook.isrun not mymousehook.isrun end end procedure uninstal...