public void SetHook() { hookThread = new Thread(() => { hookHandle = HookImports.SetWindowsHookEx(hookId, proc, IntPtr.Zero, 0); HookImports.MSG msg = new HookImports.MSG(); while (HookImports.GetMessage(ref msg, IntPtr.Zero, 0, 0)) { HookImports.TranslateMessage(ref msg); HookImports.DispatchMessage(ref msg); } }) { Priority = ThreadPriority.Highest }; hookThread.Start(); }
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0) { return(HookImports.CallNextHookEx(Instance.hookHandle, nCode, wParam, lParam)); } try { InputType input = new InputType(); input.Init(nCode, wParam, lParam); Instance.InputRegisterd?.Invoke(Instance, input); if (input.Block) { return(new IntPtr(-1)); } } catch (Exception e) { Instance.ExceptionRaised?.Invoke(Instance, e); } return(HookImports.CallNextHookEx(Instance.hookHandle, nCode, wParam, lParam)); }
public void RemoveHook() { HookImports.UnhookWindowsHookEx(hookHandle); hookThread.Abort(); }