Ejemplo n.º 1
0
        protected void OnKeyActivity(KeyActivityEventArgs e)
        {
            EventHandler <KeyActivityEventArgs> handler = KeyActivity;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Transmisja klawisza klawiatury
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="ea"></param>
        public void KeyTransmission(object sender, KeyActivityEventArgs ea)
        {
            byte actionByte;

            if (ea.IsPressed)
            {
                actionByte = (byte)'K';
            }
            else
            {
                actionByte = (byte)'k';
            }
            byte keyByte = MapKeyToArduinoKeycodeByte(ea.KeyCode);

            byte[] byteArray = new byte[] { actionByte, keyByte };
            AppObjects.PortService.SendBytes(byteArray, 0, 2);
        }
Ejemplo n.º 3
0
        private IntPtr HookKeyboardCallbackImplementation(int nCode, IntPtr wParam, IntPtr lParam)
        {
            int  wParamAsInt = wParam.ToInt32();
            bool keyDown     = (wParamAsInt == WM_KEYDOWN);
            bool sysKeyDown  = (wParamAsInt == WM_SYSKEYDOWN);
            var  keyboardKey = (KeyCode)Marshal.ReadInt32(lParam);

            if (keyboardKey == KeyCode.Scroll)
            {
                // w przypadku klawisza scroll lock którego i tak nie wysyłamy, interesuje nas tylko przyciśnięcie
                if (keyDown)
                {
                    // toggle zdalne sterowanie
                    if (RemoteControlActive)
                    {
                        RemoteControlActive = false;
                    }
                    else
                    {
                        // jeśli jest zezwolenie na aktywację zdalnego sterowania
                        if (CanActivateRemoteControl)
                        {
                            RemoteControlActive = true;
                            // pobierz bazową pozycję dla myszy
                            User32.GetCursorPos(out User32.POINT lpPoint);
                            baseMouseX = lpPoint.x;
                            baseMouseY = lpPoint.y;
                        }
                    }
                }
                // puszczamy dalej (nie łapiemy) scroll locka aby mieć zapaloną lampkę na klawiaturze
                return(User32.CallNextHookEx(globalKeyboardHookId, nCode, wParam, lParam));
            }
            else
            {
                if (RemoteControlActive)
                {
                    // wywołaj event i pozniej (jak jest podbindowana) wysyłka klawisza przez port
                    KeyActivityEventArgs args = new KeyActivityEventArgs();
                    args.IsPressed = keyDown | sysKeyDown;
                    args.KeyCode   = keyboardKey;

                    // prawy ALT jest przesyłany jako kombinacja z Ctrl lewym i tutaj trzeba pokombinować, stąd poniższe 4 kroki

                    // 1 - poczatek transmisji prawego ALTa - najpierw leci Ctrl lewy
                    if (systemKeyActionActive == false && !keyDown && sysKeyDown && keyboardKey == KeyCode.LControlKey)
                    {
                        systemKeyActionActive = true;
                        // ignorujemy i nie przesylamy dalej
                        return((IntPtr)1);
                    }

                    // 2 - kolejny etap transmisji prawego ALTa - będzie obsłużony normalnie jak zwykły klawisz, więc nie obkodowane

                    // 3
                    if (systemKeyActionActive == true && !keyDown && !sysKeyDown && keyboardKey == KeyCode.LControlKey)
                    {
                        systemKeyActionActive = false;
                        // ignorujemy i nie przesylamy dalej
                        return((IntPtr)1);
                    }

                    // 4 etapu tez nie trzeba obkodowywać bo też będzie obsłużony normalnie

                    // przesylamy dalej
                    OnKeyActivity(args);

                    //Return a dummy value to trap the keystroke - łapiemy i nie puszczamy dalej do obsługi
                    return((IntPtr)1);
                }
                else
                {
                    // puszczamy dalej (nie łapiemy) do obsługi
                    return(User32.CallNextHookEx(globalKeyboardHookId, nCode, wParam, lParam));
                }
            }
        }