private void HookAction(Action <CWPRETSTRUCT> action) { this.hookAction = action; this.hookProc = new UnsafeNativeMethods.HookProc(MessageHook); this.hook = UnsafeNativeMethods.SetWindowsHookEx( HookType.WH_CALLWNDPROCRET, this.hookProc, IntPtr.Zero, UnsafeNativeMethods.GetCurrentThreadId()); }
private static IntPtr SetHook(UnsafeNativeMethods.HookProc proc) { using (var curProcess = Process.GetCurrentProcess()) using (var curModule = curProcess.MainModule) { if (curModule != null) { return(UnsafeNativeMethods.SetWindowsHookEx((int)UnsafeNativeMethods.HookType.WH_KEYBOARD_LL, proc, UnsafeNativeMethods.GetModuleHandle(curModule.ModuleName), 0)); } return(IntPtr.Zero); } }
public void StartMonitoring(bool installMouseHook, bool installKeyboardHook) { if (mouseHook_ == IntPtr.Zero && installMouseHook) { mouseHookProcedure_ = new UnsafeNativeMethods.HookProc(MouseHookProc_); mouseHook_ = UnsafeNativeMethods.SetWindowsHookEx( SafeNativeMethods.WH_MOUSE_LL, mouseHookProcedure_, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); if (mouseHook_ == IntPtr.Zero) { int errorCode = Marshal.GetLastWin32Error(); StopMonitoring(true, false, false); throw new Win32Exception(errorCode); } } if (keyboardHook_ == IntPtr.Zero && installKeyboardHook) { keyboardHookProcedure_ = new UnsafeNativeMethods.HookProc(KeyboardHookProc_); keyboardHook_ = UnsafeNativeMethods.SetWindowsHookEx( SafeNativeMethods.WH_KEYBOARD_LL, keyboardHookProcedure_, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); if (keyboardHook_ == IntPtr.Zero) { int errorCode = Marshal.GetLastWin32Error(); StopMonitoring(false, true, false); throw new Win32Exception(errorCode); } } }