/// <summary> /// Low- Level Keyboard hook Callback /// </summary> IntPtr LLKeyboardCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)LowLevel.Constantss.WM_KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); //process keypress Keys vKey = (Keys)vkCode; char vChar = GetCharFromKey(vKey); //invoke event bool?cancelPress = KeyPressed?.Invoke(vKey, vChar); if (cancelPress.HasValue && cancelPress.Value) { //cancel keypress return((IntPtr)1); } } return(LowLevel.CallNextHookEx(hookPtr, nCode, wParam, lParam)); }