private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { //KeyMsg m = (KeyMsg)Marshal.PtrToStructure(lParam, typeof(KeyMsg)); dataTable.Rows.Add(nCode, wParam, lParam); dgvLogKeyboard.DataSource = dataTable; return(ClsCommon.CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)); }
/// <summary> /// 卸载键盘钩子 /// </summary> public void KeyboardHookStop() { bool retKeyboard = true; bool retMouse = true; if (hKeyboardHook != 0) { retKeyboard = ClsCommon.UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; } if (!(retKeyboard)) { throw new Exception("UnhookWindowsHookEx failed."); } }
/// <summary> /// 安装键盘钩子 /// </summary> public void KeyboardHookStart() { if (hKeyboardHook == 0) { // 创建HookProc实例 KeyboardHookProcedure = new ClsCommon.HookProc(KeyboardHookProc); // 设置线程钩子 //idHook=2 线程钩子 idHook=13 全局钩子 hKeyboardHook = ClsCommon.SetWindowsHookEx(2, KeyboardHookProcedure, IntPtr.Zero, ClsCommon.GetCurrentThreadId()); //hKeyboardHook = ClsCommon.SetWindowsHookEx(13, KeyboardHookProcedure, // Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); // 如果设置钩子失败 if (hKeyboardHook == 0) { KeyboardHookStop(); throw new Exception("SetWindowsHookEx failed."); } } }