From adc58f047464e47576fa6efe7b76811c493b1fa0 Mon Sep 17 00:00:00 2001 From: Pavel Amialiushka Date: Mon, 23 Nov 2015 14:28:14 +0300 Subject: [PATCH] fix bug on recognizing Shift+Key press/release --- KeyboardHook.cs | 15 ++++++++++++--- SettingsForm.cs | 1 + Switcher.cs | 4 +--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/KeyboardHook.cs b/KeyboardHook.cs index 205e93a..b026be8 100644 --- a/KeyboardHook.cs +++ b/KeyboardHook.cs @@ -70,10 +70,19 @@ private bool ProcessKeyPressInt(int nCode, IntPtr wParam, IntPtr lParam) var keybdinput = (KEYBDINPUT)Marshal.PtrToStructure(lParam, typeof(KEYBDINPUT)); var keyData = (Keys)keybdinput.Vk; - keyData |= LowLevelAdapter.KeyPressed(Keys.ControlKey) ? Keys.Control : 0; - keyData |= LowLevelAdapter.KeyPressed(Keys.Menu) ? Keys.Alt : 0; - keyData |= LowLevelAdapter.KeyPressed(Keys.ShiftKey) ? Keys.Shift : 0; + bool modifiers = + (Keys)keybdinput.Vk == Keys.RControlKey + || (Keys)keybdinput.Vk == Keys.LControlKey + || (Keys)keybdinput.Vk == Keys.RShiftKey + || (Keys)keybdinput.Vk == Keys.LShiftKey + || (Keys)keybdinput.Vk == Keys.Alt; + if (!modifiers) + { + keyData |= LowLevelAdapter.KeyPressed(Keys.ControlKey) ? Keys.Control : 0; + keyData |= LowLevelAdapter.KeyPressed(Keys.Menu) ? Keys.Alt : 0; + keyData |= LowLevelAdapter.KeyPressed(Keys.ShiftKey) ? Keys.Shift : 0; + } var winPressed = LowLevelAdapter.KeyPressed(Keys.LWin) || LowLevelAdapter.KeyPressed(Keys.RWin); var args = new KeyboardEventArgs(keyData, winPressed, key_down); diff --git a/SettingsForm.cs b/SettingsForm.cs index 1f0179d..09d0efa 100644 --- a/SettingsForm.cs +++ b/SettingsForm.cs @@ -182,6 +182,7 @@ void InitializeHotkeyBoxes() } void kbdHook_KeyboardEvent(object sender, KeyboardEventArgs e) { + if (!e.Pressed) return; if (currentHotkeyType != HotKeyType.None) { var vk = e.KeyCode; diff --git a/Switcher.cs b/Switcher.cs index e0de756..b79a26d 100644 --- a/Switcher.cs +++ b/Switcher.cs @@ -120,14 +120,12 @@ private void OnKeyPress(KeyboardEventArgs evtData) { var vkCode = evtData.KeyCode; + readyToSwitch = false; if (evtData.Equals(settings.SwitchLayoutHotkey)) { readyToSwitch = true; - return; } - readyToSwitch = false; - if (evtData.Equals(settings.SwitchHotkey)) { ConvertLast();