Beispiel #1
0
        public int HookProcedure(int nCode, IntPtr wParam, IntPtr lParam)
        {
            bool cancel = false;

            if (nCode >= 0 && (wParam == (IntPtr)User32.WindowMessage.WM_KEYDOWN || wParam == (IntPtr)User32.WindowMessage.WM_SYSKEYDOWN))
            {
                Win32Api.KBDLLHOOKSTRUCT kb = (Win32Api.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(Win32Api.KBDLLHOOKSTRUCT));
                if ((kb.dwFlags & Win32Api.KBDLLHOOKSTRUCTF.LLKHF_INJECTED) == 0)
                {
                    cancel = OnKeyDownEvent(kb);
                }
            }
            else if (nCode >= 0 && (wParam == (IntPtr)User32.WindowMessage.WM_KEYUP || wParam == (IntPtr)User32.WindowMessage.WM_SYSKEYUP))
            {
                Win32Api.KBDLLHOOKSTRUCT kb = (Win32Api.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(Win32Api.KBDLLHOOKSTRUCT));
                if ((kb.dwFlags & Win32Api.KBDLLHOOKSTRUCTF.LLKHF_INJECTED) == 0)
                {
                    cancel = OnKeyUpEvent(kb);
                }
            }
            if (cancel)
            {
                return((int)new IntPtr(1));
            }
            else
            {
                return(User32.CallNextHookEx(hookId.DangerousGetHandle(), nCode, wParam, lParam));
            }
        }
Beispiel #2
0
        protected bool OnKeyUpEvent(Win32Api.KBDLLHOOKSTRUCT kb)
        {
            KeyHookEventArgs e = new(kb);

            KeyUpEvent?.Invoke(this, e);
            return(e.Cancel);
        }
Beispiel #3
0
 public KeyHookEventArgs(Win32Api.KBDLLHOOKSTRUCT kb)
 {
     VkCode           = (Keys)kb.wVk;
     ScanCode         = kb.wScan;
     Flags            = kb.dwFlags;
     IsLLKHF_EXTENDED = (Flags & Win32Api.KBDLLHOOKSTRUCTF.LLKHF_EXTENDED) != 0;
     Time             = kb.time;
 }