Пример #1
0
        /* Capture Events */


        public static IntPtr KeyboardCB(int nCode, IntPtr wParam, IntPtr LParam)
        {
            KeyMsg km = new KeyMsg();

            unsafe
            {
                KBDLLHOOKSTRUCT *kp = (KBDLLHOOKSTRUCT *)LParam.ToPointer();

                km.VirtualKey = (VirtualKeyShort)kp->vkCode;


                switch (wParam.ToInt32())
                {
                case 260:
                    //Console.WriteLine(km.VirtualKey.ToString() + ": Pressed - System");
                    km.Pressed = true;
                    break;

                case (int)ButtonEvent.WM_KEYUP:
                    //Console.WriteLine(km.VirtualKey.ToString() + ": Released");
                    km.Pressed = false;
                    break;

                case (int)ButtonEvent.WM_KEYDOWN:
                    //Console.WriteLine(km.VirtualKey.ToString() + ": Pressed");
                    km.Pressed = true;
                    break;

                default: return(new IntPtr(1));
                }

                if (km.VirtualKey == VirtualKeyShort.LMENU)
                {
                    ALT = km.Pressed;
                }
                if (km.VirtualKey == VirtualKeyShort.LCONTROL)
                {
                    CTRL = km.Pressed;
                }

                if (CTRL)
                {
                    if ((km.VirtualKey == VirtualKeyShort.KEY_C || km.VirtualKey == VirtualKeyShort.KEY_X) && km.Pressed)
                    {
                        _Host.EnqueueCBMsg();
                    }

                    if (ALT)
                    {
                        if (km.VirtualKey == VirtualKeyShort.KEY_V && km.Pressed)
                        {
                            _Host.SendCB();
                        }


                        //  HOT KEY HOST
                        if (km.VirtualKey == _hostHK && km.Pressed)
                        {
                            WindowsAPI.UnhookWindowsHookEx(KEYhook);
                            WindowsAPI.UnhookWindowsHookEx(MOUSEhook);

                            _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LMENU, false));
                            _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LCONTROL, false));

                            _Host.EnqueueEventMsg(new StopComm(-1));

                            return(new IntPtr(1));
                        }


                        for (int k = 0; k < 4; k++)
                        {
                            if ((km.VirtualKey == _sp[k].hk) && (km.Pressed))
                            {
                                _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LMENU, false));
                                _Host.EnqueueEventMsg(new KeyMsg(VirtualKeyShort.LCONTROL, false));

                                _Host.EnqueueEventMsg(new StopComm(k));
                                _Host.EnqueueEventMsg(new InitComm(k));

                                return(new IntPtr(1));
                            }
                        }
                    }
                }

                /* no hotkey identyfied , enqueing message */

                _Host.EnqueueEventMsg(km);

                return(new IntPtr(1));
            }
        }
Пример #2
0
            public override void Update()
            {
                base.Update();

                if (_obj is StopComm)
                {
                    Server.State = new AuthenticatedState();
                }
                else if (_obj is KeyMsg)
                {
                    KeyMsg  kMsg   = (KeyMsg)_obj;
                    INPUT[] inputs = new INPUT[1];
                    inputs[0].type     = (uint)InputType.INPUT_KEYBOARD;
                    inputs[0].U.ki.wVk = kMsg.VirtualKey;
                    Console.WriteLine(kMsg.VirtualKey);
                    Console.WriteLine(kMsg.Pressed);
                    if (!kMsg.Pressed)
                    {
                        inputs[0].U.ki.dwFlags = KEYEVENTF.KEYUP;
                    }
                    else
                    {
                        inputs[0].U.ki.dwFlags = 0;
                    }
                    inputs[0].U.ki.time        = 0;
                    inputs[0].U.ki.dwExtraInfo = (UIntPtr)(UInt64)0;
                    WindowsAPI.SendInput(1, inputs, System.Runtime.InteropServices.Marshal.SizeOf(inputs[0]));
                }
                else if (_obj is MouseMsg)
                {
                    MouseMsg mMsg   = (MouseMsg)_obj;
                    INPUT[]  inputs = new INPUT[1];
                    inputs[0].type    = (uint)InputType.INPUT_MOUSE;
                    inputs[0].U.mi.dx = mMsg.Dx;
                    inputs[0].U.mi.dy = mMsg.Dy;
                    MOUSEEVENTF dwFlags = 0;
                    if ((mMsg.Flags & (int)MouseEventFlags.LeftButtonDown) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.LEFTDOWN;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.LeftButtonUp) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.LEFTUP;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.RightButtonDown) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.RIGHTDOWN;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.RightButtonUp) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.RIGHTUP;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.MiddleButtonDown) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.MIDDLEDOWN;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.MiddleButtonUp) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.MIDDLEUP;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.Wheel) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.WHEEL;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.HWheel) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.HWHEEL;
                    }
                    if ((mMsg.Flags & (int)MouseEventFlags.MouseMoved) != 0)
                    {
                        dwFlags |= MOUSEEVENTF.MOVE;
                    }
                    inputs[0].U.mi.dwFlags     = dwFlags;
                    inputs[0].U.mi.mouseData   = mMsg.MouseData;
                    inputs[0].U.mi.time        = 0;
                    inputs[0].U.mi.dwExtraInfo = (UIntPtr)(UInt64)0;
                    WindowsAPI.SendInput(1, inputs, System.Runtime.InteropServices.Marshal.SizeOf(inputs[0]));
                }
            }