Esempio n. 1
0
        private void mouseHook_HookFired(object sender, HookFiredEventArgs e)
        {
            MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(e.LParam, typeof(MSLLHOOKSTRUCT));
            // TODO: double click, mouse wheel
            CancelMouseEventArgs args = null;

            switch ((MouseMessages)e.WParam)
            {
            case MouseMessages.WM_LBUTTONDOWN:
                if (LeftMouseDown != null)
                {
                    LeftMouseDown(this, args = new CancelMouseEventArgs(MouseButtons.Left, 1, hookStruct.pt.x, hookStruct.pt.y, 0));
                }
                break;

            case MouseMessages.WM_LBUTTONUP:
                if (LeftMouseUp != null)
                {
                    LeftMouseUp(this, args = new CancelMouseEventArgs(MouseButtons.Left, 1, hookStruct.pt.x, hookStruct.pt.y, 0));
                }
                break;

            case MouseMessages.WM_RBUTTONDOWN:
                if (RightMouseDown != null)
                {
                    RightMouseDown(this, args = new CancelMouseEventArgs(MouseButtons.Right, 0, hookStruct.pt.x, hookStruct.pt.y, 0));
                }
                break;

            case MouseMessages.WM_RBUTTONUP:
                if (RightMouseUp != null)
                {
                    RightMouseUp(this, args = new CancelMouseEventArgs(MouseButtons.Right, 0, hookStruct.pt.x, hookStruct.pt.y, 0));
                }
                break;

            case MouseMessages.WM_MOUSEMOVE:
                if (MouseMove != null)
                {
                    MouseMove(this, args = new CancelMouseEventArgs(MouseButtons.None, 0, hookStruct.pt.x, hookStruct.pt.y, 0));
                }
                break;
            }
            if (args != null && args.Cancel)
            {
                e.Cancel = true;
            }
        }
Esempio n. 2
0
        private void keyboardHook_HookFired(object sender, HookFiredEventArgs e)
        {
            if (e.NCode >= 0 && e.WParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(e.LParam);
                if (KeyDown != null)
                {
                    var keys = AddModifiers((Keys)vkCode);
                    var args = new CancelKeyEventArgs(keys);
                    KeyDown(this, args);
                    if (args.Cancel)
                    {
                        e.Cancel = true;
                    }
                }

                if (KeyPress != null)
                {
                    bool isDownShift    = ((GetKeyState(VK_SHIFT) & 0x80) == 0x80 ? true : false);
                    bool isDownCapslock = (GetKeyState(VK_CAPITAL) != 0 ? true : false);

                    KeyboardHookStruct khs = (KeyboardHookStruct)Marshal.PtrToStructure(e.LParam, typeof(KeyboardHookStruct));

                    byte[] keyState = new byte[256];
                    GetKeyboardState(keyState);
                    byte[] inBuffer = new byte[2];
                    if (ToAscii(khs.VirtualKeyCode,
                                khs.ScanCode,
                                keyState,
                                inBuffer,
                                khs.Flags) == 1)
                    {
                        char key = (char)inBuffer[0];
                        if ((isDownCapslock ^ isDownShift) && Char.IsLetter(key))
                        {
                            key = Char.ToUpper(key);
                        }
                        CancelKeyPressEventArgs args = new CancelKeyPressEventArgs(key);
                        KeyPress(this, args);
                        if (args.Cancel)
                        {
                            e.Cancel = true;
                        }
                    }
                }
            }
        }
Esempio n. 3
0
 private IntPtr HookCallback(
     int nCode, IntPtr wParam, IntPtr lParam)
 {
     if (nCode >= 0)
     {
         var args = new HookFiredEventArgs()
         {
             NCode = nCode, LParam = lParam, WParam = wParam
         };
         if (HookFired != null)
         {
             HookFired(this, args);
         }
         if (args.Cancel)
         {
             return(new IntPtr(1));
         }
     }
     return(CallNextHookEx(_hookID, nCode, wParam, lParam));
 }