今天,有個同事問我,怎樣在C#中使用全局鉤子?以前寫的全局鉤子都是用unmanaged C或C++寫個DLL來實現,可大家都知道,C#是基于.Net Framework的,是managed,怎么實現全局鉤子呢?于是開始到網上搜索,好不容易找到一篇,318804 - HOW TO: Set a Windows Hook in Visual C# .NET,里面詳細的說明了如何使用鼠標鉤子捕獲鼠標的移動等,可是,它只能在application里起作用,出了Application就沒用了,就是說它還是沒有實現全局鉤子,而且文章結尾處說:“Global Hooks are not supported in the .NET Framework...”,這可怎么辦呢? 別擔心,辦法總是有的,經過一番摸索以后,發現WH_KEYBORAD_LL和WH_MOUSE_LL這兩個low-level的hook可以被安裝成全局的,這就好辦了,我們不妨用這兩個low-level的hook替換掉WH_KEYBORAD和WH_MOUSE,于是開始測試。結果成功了,在C#里實現了全局鉤子。 我們來看一下主要代碼段?! ∈紫鹊谷胨枰膚indows函數,主要有三個,SetWindowsHookEX用來安裝鉤子,UnhookWindowsHookEX用來卸載鉤子以及CallNextHookEX用來將hook信息傳遞到鏈表中下一個hook處理過程。
C#代碼新聞熱點
疑難解答