/// <summary> /// Register a callback for events /// </summary> /// <param name="eventId">String ID for event</param> /// <param name="listener">Listener object</param> public void RegisterCallback(string eventId, IHookListener listener) { if(!_callbacks.ContainsKey(eventId)) { _callbacks[eventId] = new List<IHookListener>(); } _callbacks[eventId].Add(listener); }
public void Unregister(IHookListener listener) { if (listener == null) throw new ArgumentNullException("listener"); UnhookWindowsHookEx(listener.HookPointer); ThrowExceptionIfLastErrorExists(); listener.HookPointer = IntPtr.Zero; }
private int HandleMessage(int code, IntPtr wparam, IntPtr lparam, IHookListener listener) { if (code == WM_HOTKEY) { var key = (Keys)wparam.ToInt32(); listener.HandleHookMessage(key); return 1; } return CallNextHook(listener.HookPointer, code, wparam, lparam); }
public void Register(IHookListener listener) { if (listener == null) throw new ArgumentNullException("listener"); var hookPointer = SetWindowsHookEx(listener.HookId, new MessageHandler((c, w, l) => HandleMessage(c, w, l, listener)), IntPtr.Zero, GetCurrentThreadId()); if (hookPointer == IntPtr.Zero) ThrowExceptionIfLastErrorExists(); listener.HookPointer = hookPointer; }