private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0 || Enable == false) { return(API.CallNextHookEx(_hookID, nCode, wParam, lParam)); } API.KBDLLHOOKSTRUCT hookStruct = (API.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(API.KBDLLHOOKSTRUCT)); Keys key = (Keys)hookStruct.vkCode; KeyStates keyState = KeyStates.None; switch ((API.KeyboardMessages)wParam) { case API.KeyboardMessages.WM_KEYDOWN: { keyState = KeyStates.Down; } break; case API.KeyboardMessages.WM_KEYUP: { keyState = KeyStates.Up; } break; } if (KeyboardAction(new KeyboardActionArgs(key, keyState))) { return((IntPtr)1); } return(API.CallNextHookEx(_hookID, nCode, wParam, lParam)); }
private bool KeyboardProcedure(int message, API.KBDLLHOOKSTRUCT param) { var isInjected = ((param.flags & (1 << 1)) | (param.flags & (1 << 4))) != 0; var isALTDown = (param.flags & (1 << 5)) != 0; var args = new KeyEventArgs(param.vkCode, isInjected, isALTDown); if (message == API.WM_KEYDOWN || message == API.WM_SYSKEYDOWN) { KeyDownEvent?.Invoke(this, args); } else if (message == API.WM_KEYUP || message == API.WM_SYSKEYUP) { KeyUpEvent?.Invoke(this, args); } return(args.IsPrevent); }