今天,有個(gè)同事問(wèn)我,怎樣在C#中使用全局鉤子?以前寫(xiě)的全局鉤子都是用unmanaged C或C++寫(xiě)個(gè)DLL來(lái)實(shí)現,可大家都知道,C#是基于.Net Framework的,是managed,怎么實(shí)現全局鉤子呢?于是開(kāi)始到網(wǎng)上搜索,好不容易找到一篇,318804 - HOW TO: Set a Windows Hook in Visual C# .NET,里面詳細的說(shuō)明了如何使用鼠標鉤子捕獲鼠標的移動(dòng)等,可是,它只能在A(yíng)pplication里起作用,出了Application就沒(méi)用了,就是說(shuō)它還是沒(méi)有實(shí)現全局鉤子,而且文章結尾處說(shuō):“Global Hooks are not supported in the .NET Framework...”,這可怎么辦呢?
別擔心,辦法總是有的,經(jīng)過(guò)一番摸索以后,發(fā)現WH_KEYBORAD_LL和WH_MOUSE_LL這兩個(gè)low-level的hook可以被安裝成全局的,這就好辦了,我們不妨用這兩個(gè)low-level的hook替換掉WH_KEYBORAD和WH_MOUSE,于是開(kāi)始測試。結果成功了,在C#里實(shí)現了全局鉤子。
我們來(lái)看一下主要代碼段。示例源碼下載地址請訪(fǎng)問(wèn)我的網(wǎng)站:http://www.vczx.com/article/show.php?id=1672
首先倒入所需要的windows函數,主要有三個(gè),SetWindowsHookEX用來(lái)安裝鉤子,UnhookWindowsHookEX用來(lái)卸載鉤子以及CallNextHookEX用來(lái)將hook信息傳遞到鏈表中下一個(gè)hook處理過(guò)程。





























































































































































聯(lián)系客服