nCode參數(shù)是Hook代碼,Hook子程使用這個(gè)參數(shù)來(lái)確定任務(wù)。這個(gè)參數(shù)的值依賴于Hook類型,每一種Hook都有自己的Hook代碼特征字符集。
wParam和lParam參數(shù)的值依賴于Hook代碼,但是它們的典型值是包含了關(guān)于發(fā)送或者接收消息的信息。
2、鉤子的安裝與釋放:
使用API函數(shù)SetWindowsHookEx()把一個(gè)應(yīng)用程序定義的鉤子子程安裝到鉤子鏈表中。SetWindowsHookEx函數(shù)總是在 Hook鏈的開(kāi)頭安裝Hook子程。當(dāng)指定類型的Hook監(jiān)視的事件發(fā)生時(shí),系統(tǒng)就調(diào)用與這個(gè)Hook關(guān)聯(lián)的Hook鏈的開(kāi)頭的Hook子程。每一個(gè) Hook鏈中的Hook子程都決定是否把這個(gè)事件傳遞到下一個(gè)Hook子程。Hook子程傳遞事件到下一個(gè)Hook子程需要調(diào)用 CallNextHookEx函數(shù)。
HHOOK SetWindowsHookEx(
int idHook, // 鉤子的類型,即它處理的消息類型
HOOKPROC lpfn, // 鉤子子程的地址指針。如果dwThreadId參數(shù)為0
// 或是一個(gè)由別的進(jìn)程創(chuàng)建的線程的標(biāo)識(shí),
// lpfn必須指向DLL中的鉤子子程。
// 除此以外,lpfn可以指向當(dāng)前進(jìn)程的一段鉤子子程代碼。
// 鉤子函數(shù)的入口地址,當(dāng)鉤子鉤到任何消息后便調(diào)用這個(gè)函數(shù)。
HINSTANCE hMod, // 應(yīng)用程序?qū)嵗木浔?biāo)識(shí)包含lpfn所指的子程的
DLL。
// 如果dwThreadId 標(biāo)識(shí)當(dāng)前進(jìn)程創(chuàng)建的一個(gè)線程,
// 而且子程代碼位于當(dāng)前進(jìn)程,hMod必須為NULL。
// 可以很簡(jiǎn)單的設(shè)定其為本應(yīng)用程序的實(shí)例句柄。
DWORD dwThreadId // 與安裝的鉤子子程相關(guān)聯(lián)的線程的標(biāo)識(shí)符。
// 如果為0,鉤子子程與所有的線程關(guān)聯(lián),即為全局鉤子。
);
相關(guān)推薦:C++考試輔導(dǎo):內(nèi)存分配的五種方法的區(qū)別北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |