protected override bool ReleaseHandle() { //NOTE Calling Unhook during processexit causes deley if (_closing) { return(true); } return(HookNativeMethods.UnhookWindowsHookEx(handle) != 0); }
private static HookResult HookGlobal(int hookId, Callback callback) { _globalHookProc = (code, param, lParam) => HookProcedure(code, param, lParam, callback); var hookHandle = HookNativeMethods.SetWindowsHookEx( hookId, _globalHookProc, Process.GetCurrentProcess().MainModule.BaseAddress, 0); if (hookHandle.IsInvalid) { ThrowLastUnmanagedErrorAsException(); } return(new HookResult(hookHandle, _globalHookProc)); }
private static HookResult HookApp(int hookId, Callback callback) { _appHookProc = (code, param, lParam) => HookProcedure(code, param, lParam, callback); var hookHandle = HookNativeMethods.SetWindowsHookEx( hookId, _appHookProc, IntPtr.Zero, ThreadNativeMethods.GetCurrentThreadId()); if (hookHandle.IsInvalid) { ThrowLastUnmanagedErrorAsException(); } return(new HookResult(hookHandle, _appHookProc)); }
private static IntPtr CallNextHookEx(int nCode, IntPtr wParam, IntPtr lParam) { return(HookNativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); }