国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何在C#中使用全局鼠標、鍵盤Hook

2019-11-17 03:04:22
字體:
來源:轉載
供稿:網友
如何在C#中使用全局鼠標、鍵盤Hook

今天,有個同事問我,怎樣在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#里實現了全局鉤子。  我們來看一下主要代碼段。  首先倒入所需要的windows函數,主要有三個,SetWindowsHookEX用來安裝鉤子,UnhookWindowsHookEX用來卸載鉤子以及CallNextHookEX用來將hook信息傳遞到鏈表中下一個hook處理過程。

C#代碼Flashvars" value="clipboard=%5BDllImport(%22user32.dll%22%2C%20CharSet%20%3D%20CharSet.Auto%2C%0A%20%20%20%20%20%20%20%20%20%20%20CallingConvention%20%3D%20CallingConvention.StdCall%2C%20SetLastError%20%3D%20true)%5D%0A%20%20%20%20%20%20%20%20PRivate%20static%20extern%20int%20SetWindowsHookEx(%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20idHook%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20HookProc%20lpfn%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20IntPtr%20hMod%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20dwThreadId)%3B%0A%0A%5BDllImport(%22user32.dll%22%2C%20CharSet%20%3D%20CharSet.Auto%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20CallingConvention%20%3D%20CallingConvention.StdCall%2C%20SetLastError%20%3D%20true)%5D%0A%20%20%20%20%20%20%20%20private%20static%20extern%20int%20UnhookWindowsHookEx(int%20idHook)%3B%0A%0A%5BDllImport(%22user32.dll%22%2C%20CharSet%20%3D%20CharSet.Auto%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20CallingConvention%20%3D%20CallingConvention.StdCall)%5D%0A%20%20%20%20%20%20%20%20private%20static%20extern%20int%20CallNextHookEx(%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20idHook%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20nCode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20int%20wParam%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20IntPtr%20lParam)%3B%0A%0A%E3%80%80%E3%80%80%E4%B8%8B%E9%9D%A2%E6%98%AF%E6%9C%89%E5%85%B3%E8%BF%99%E4%B8%A4%E4%B8%AAlow-level%20hook%E5%9C%A8Winuser.h%E4%B8%AD%E7%9A%84%E5%AE%9A%E4%B9%89%EF%BC%9A%0A%0A%0A%2F%2F%2F%20%3Csummary%3E%0A%20%20%20%20%20%20%20%20%2F%2F%2F%20Windows%20NT%2F2000%2FXP%3A%20Installs%20a%20hook%20procedure%20that%20monitors%20low-level%20mouse%20input%20events.%0A%20%20%20%20%20%20%20%20%2F%2F%2F%20%3C%2Fsummary%3E%0A%20%20%20%20%20%20%20%20private%20const%20int%20WH_MOUSE_LL%20%20%20%20%20%20%20%3D%2014%3B%0A%20%20%20%20%20%20%20%20%2F%2F%2F%20%3Csummary%3E%0A%20%20%20%20%20%20%20%20%2F%2F%2F%20Windows%20NT%2F2000%2FXP%3A%20Installs%20a%20hook%20procedure%20that%20monitors%20low-level%20keyboard%20input%20events.%0A%20%20%20%20%20%20%20%20%2F%2F%2F%20%3C%2Fsummary%3E%0A%20%20%20%20%20%20%20%20private%20const%20int%20WH_KEYBOARD_LL%20%20%20%20%3D%2013%3B%0A%0A%E3%80%80%E3%80%80%E5%9C%A8%E5%AE%89%E8%A3%85%E5%85%A8%E5%B1%80%E9%92%A9%E5%AD%90%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%B1%E8%A6%81%E5%81%9A%E6%9B%BF%E6%8D%A2%E4%BA%86%EF%BC%8C%E5%B0%86WH_MOUSE%E5%92%8CWH_KEYBORAD%E5%88%86%E5%88%AB%E6%8D%A2%E6%88%90WH_MOUSE_LL%E5%92%8CWH_KEYBORAD_LL%EF%BC%9A%0A%0A%0A%2F%2Finstall%20hook%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hMouseHook%20%3D%20SetWindowsHookEx(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20WH_MOUSE_LL%2C%E3%80%80%2F%2F%E5%8E%9F%E6%9D%A5%E6%98%AFWH_MOUSE%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MouseHookProcedure%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Marshal.GetHINSTANCE(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Assembly.GetExecutingAssembly().GetModules()%5B0%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200)%3B%0A%0A%2F%2Finstall%20hook%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hKeyboardHook%20%3D%20SetWindowsHookEx(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20WH_KEYBOARD_LL%2C%20%2F%2F%E5%8E%9F%E6%9D%A5%E6%98%AFWH_KEYBORAD%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20KeyboardHookProcedure%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Marshal.GetHINSTANCE(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Assembly.GetExecutingAssembly().GetModules()%5B0%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200)%3B%0A%0A%E3%80%80%E3%80%80%E8%BF%99%E6%A0%B7%E6%9B%BF%E6%8D%A2%E4%BA%86%E4%B9%8B%E5%90%8E%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%B1%E5%8F%AF%E4%BB%A5%E5%AE%9E%E7%8E%B0%E5%85%A8%E5%B1%80%E9%92%A9%E5%AD%90%E4%BA%86%EF%BC%8C%E8%80%8C%E4%B8%94%EF%BC%8C%E4%B8%8D%E9%9C%80%E8%A6%81%E5%86%99DLL%E3%80%82%E7%9C%8B%E4%B8%80%E4%B8%8B%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E6%83%85%E5%86%B5%EF%BC%9A%0A%0A%0A%0A%E3%80%80%E3%80%80%E4%B8%8B%E9%9D%A2%E6%98%AF%E5%85%B3%E4%BA%8E%E9%BC%A0%E6%A0%87%E5%92%8C%E9%94%AE%E7%9B%98%E7%9A%84%E4%B8%A4%E4%B8%AACallback%E5%87%BD%E6%95%B0%EF%BC%9A%0A%0A%0Aprivate%20int%20MouseHookProc(int%20nCode%2C%20int%20wParam%2C%20IntPtr%20lParam)%0A%0A%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20if%20ok%20and%20someone%20listens%20to%20our%20events%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20((nCode%20%3E%3D%200)%20%26%26%20(OnMouseActivity%20!%3D%20null))%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FMarshall%20the%20data%20from%20callback.%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MouseLLHookStruct%20mouseHookStruct%20%3D%20(MouseLLHookStruct)Marshal.PtrToStructure(lParam%2C%20typeof(MouseLLHookStruct))%3B%0A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fdetect%20button%20clicked%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MouseButtons%20button%20%3D%20MouseButtons.None%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20short%20mouseDelta%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20switch%20(wParam)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20WM_LBUTTONDOWN%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fcase%20WM_LBUTTONUP%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fcase%20WM_LBUTTONDBLCLK%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20button%20%3D%20MouseButtons.Left%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20WM_RBUTTONDOWN%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fcase%20WM_RBUTTONUP%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fcase%20WM_RBUTTONDBLCLK%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20button%20%3D%20MouseButtons.Right%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20WM_MOUSEWHEEL%3A%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FIf%20the%20message%20is%20WM_MOUSEWHEEL%2C%20the%20high-order%20Word%20of%20mouseData%20member%20is%20the%20wheel%20delta.%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FOne%20wheel%20click%20is%20defined%20as%20WHEEL_DELTA%2C%20which%20is%20120.%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F(value%20%3E%3E%2016)%20%26%200xffff%3B%20retrieves%20the%20high-order%20word%20from%20the%20given%2032-bit%20value%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mouseDelta%20%3D%20(short)((mouseHookStruct.mouseData%20%3E%3E%2016)%20%26%200xffff)%3B%0A%0A%
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉隆县| 丰镇市| 汶川县| 弥渡县| 米易县| 福海县| 侯马市| 阿拉善盟| 常宁市| 宾川县| 荆门市| 庄浪县| 达拉特旗| 铜梁县| 新竹县| 宁武县| 二连浩特市| 贵溪市| 东乌珠穆沁旗| 石河子市| 彭州市| 晋中市| 漠河县| 博客| 新丰县| 呈贡县| 黑山县| 宜君县| 砚山县| 阿拉善盟| 建阳市| 合江县| 瑞金市| 文水县| 仁布县| 江孜县| 景洪市| 岳阳市| 泸定县| 南投市| 蒲江县|