protected void OnKeyActivity(KeyActivityEventArgs e) { EventHandler <KeyActivityEventArgs> handler = KeyActivity; if (handler != null) { handler(this, e); } }
/// <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); }
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)); } } }