Exemple #1
0
        private int InternalHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            var vkcode = System.Runtime.InteropServices.Marshal.ReadByte(lParam, 0);

            // pass control to our hook procedure, if enabled we wont pass message to windows
            // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx specifies we must pass message on without processing if nCode < 0
            // let scroll lock through so can toggle Enabled
            if (nCode >= 0 && vkcode != 0x91 && Program.Enabled)
            {
                var keyState = (KeyState)wParam;
                var keyEvent = new KeyEvent()
                {
                    vkCode      = vkcode,
                    scanCode    = System.Runtime.InteropServices.Marshal.ReadByte(lParam, 1),
                    flags       = System.Runtime.InteropServices.Marshal.ReadByte(lParam, 2),
                    time        = System.Runtime.InteropServices.Marshal.ReadByte(lParam, 3),
                    dwExtraInfo = System.Runtime.InteropServices.Marshal.ReadIntPtr(lParam, 4)
                };

                if (KeyboardHookEvent != null)
                {
                    KeyboardHookEvent(keyState, keyEvent);

                    /* Leaving here incase I care about return values again later                     *
                     * foreach (KeyboardHookEventHandler hookProc in KeyboardHookEvent.GetInvocationList())
                     *  hookProc(keyState, keyEvent);
                     */
                }
                return(1);
            }

            return(User32Dll.CallNextHookEx(idHook, nCode, wParam, lParam));
        }
Exemple #2
0
 public void Dispose()
 {
     if (!User32Dll.UnhookWindowsHookEx(idHook))
     {
         throw new Exception("Windows didnt let us unhook?!");
     }
 }
Exemple #3
0
 public KeyboardHook()
 {
     idHook = User32Dll.SetWindowsHookEx(WH_KEYBOARD_LL, InternalHookProc, IntPtr.Zero, 0);
 }