private static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref KeyboardHookStruct lParam);
/// <summary> /// The callback for the keyboard hook /// </summary> /// <param name="code">The hook code, if it isn't >= 0, the function shouldn't do anyting</param> /// <param name="wParam">The event type</param> /// <param name="lParam">The keyhook event information</param> /// <returns></returns> public int hookProc(int code, int wParam, ref KeyboardHookStruct lParam) { if (code >= 0) { Keys key = (Keys) lParam.vkCode; if (HookedKeys.Contains(key)) { key = AddModifiers(key); KeyEventArgs kea = new KeyEventArgs(key); if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null)) KeyDown(this, kea); else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null)) KeyUp(this, kea); if (kea.Handled) return 1; } } return CallNextHookEx(hhook, code, wParam, ref lParam); }