예제 #1
0
 private void OnKeyboardEvent(KeyboardEventArgs e)
 {
     if (KeyboardEvent != null)
     {
         KeyboardEvent(this, e);
     }
 }
예제 #2
0
 public static bool IsPrintable(KeyboardEventArgs evtData)
 {
     if (evtData.Alt || evtData.Control || evtData.Win) { return false; }
     var keyCode = evtData.KeyCode;
     if (keyCode >= Keys.D0 && keyCode <= Keys.Z) { return true; }
     if (keyCode >= Keys.Oem1 && keyCode <= Keys.OemBackslash) { return true; }
     return false;
 }
예제 #3
0
 void kbdHook_KeyboardEvent(object sender, KeyboardEventArgs e)
 {
     if (currentTextBox != null)
     {
         var vk = e.KeyCode;
         if (vk != Keys.LMenu && vk != Keys.RMenu
             && vk != Keys.LWin && vk != Keys.RWin
             && vk != Keys.LShiftKey && vk != Keys.RShiftKey
             && vk != Keys.LControlKey && vk != Keys.RControlKey)
         {
             e.Handled = true;
         }
         Invoke((MethodInvoker)delegate { currentTextBox.Text = e.ToString(); });
         currentHotkey = e;
     }
 }
예제 #4
0
        void ResetCurrentHotkey(bool clear)
        {
            switch (currentHotkeyType)
            {
            case HotKeyType.Switch:
                currentHotkey = clear ? null : settings.SwitchHotkey;
                break;

            case HotKeyType.Convert:
                currentHotkey = clear ? null : settings.ConvertSelectionHotkey;
                break;

            case HotKeyType.SwitchLayout:
                currentHotkey = clear ? null : settings.SwitchLayoutHotkey;
                break;

            default:
                currentHotkey = null;
                break;
            }
            SetCurrentHotkeyInputText(currentHotkey == null ? "None" : ReplaceCtrls(currentHotkey.ToString()));
        }
예제 #5
0
 void kbdHook_KeyboardEvent(object sender, KeyboardEventArgs e)
 {
     if (currentHotkeyType != HotKeyType.None)
     {
         var vk = e.KeyCode;
         if (vk == Keys.Escape || vk == Keys.Back)
         {
             e.Handled = true;
             ResetCurrentHotkey(vk == Keys.Back);
             return;
         }
         if (vk != Keys.LMenu && vk != Keys.RMenu &&
             vk != Keys.LWin && vk != Keys.RWin &&
             vk != Keys.LShiftKey && vk != Keys.RShiftKey &&
             vk != Keys.LControlKey && vk != Keys.RControlKey)
         {
             e.Handled = true;
         }
         SetCurrentHotkeyInputText(e.ToString());
         currentHotkey = e;
     }
 }
예제 #6
0
        public static Keys[] ParseKeys(KeyboardEventArgs keyArgs)
        {
            List <Keys> keys = new List <Keys>();

            if (keyArgs.Alt)
            {
                keys.Add(Keys.Alt);
            }
            if (keyArgs.Control)
            {
                keys.Add(Keys.Control);
            }
            if (keyArgs.Shift)
            {
                keys.Add(Keys.Shift);
            }
            if (keyArgs.Win)
            {
                keys.Add(Keys.LWin);
            }
            keys.Add(keyArgs.KeyCode);
            return(keys.ToArray());
        }
예제 #7
0
        // returns true if event is handled
        private bool ProcessKeyPressInt(int nCode, IntPtr wParam, IntPtr lParam)
        {
            try
            {

                if (nCode < 0)
                    return false;

                Func<Keys, bool> KeyPressed = LowLevelAdapter.KeyPressed;
                switch (wParam.ToInt32())
                {
                    case LowLevelAdapter.WM_KEYDOWN:
                    case LowLevelAdapter.WM_SYSKEYDOWN:

                        var keybdinput = (KEYBDINPUT)Marshal.PtrToStructure(lParam, typeof(KEYBDINPUT));
                        var keyData = (Keys)keybdinput.Vk;

                        keyData |= KeyPressed(Keys.ControlKey) ? Keys.Control : 0;
                        keyData |= KeyPressed(Keys.Menu) ? Keys.Alt : 0;
                        keyData |= KeyPressed(Keys.ShiftKey) ? Keys.Shift : 0;

                        var winPressed = KeyPressed(Keys.LWin) || KeyPressed(Keys.RWin);

                        var args = new KeyboardEventArgs(keyData, winPressed);
                        OnKeyboardEvent(args);

                        return args.Handled;
                }

            }
            catch { }
            return false;
        }
예제 #8
0
 void ResetCurrentHotkey()
 {
     switch (currentHotkeyType)
     {
         case HotKeyType.Switch:
             currentHotkey = settings.SwitchHotkey;
             break;
         case HotKeyType.Convert:
             currentHotkey = settings.ConvertSelectionHotkey;
             break;
         default:
             currentHotkey = null;
             break;
     }
     SetCurrentHotkeyInputText(currentHotkey == null ? "" : currentHotkey.ToString());
 }
예제 #9
0
 void kbdHook_KeyboardEvent(object sender, KeyboardEventArgs e)
 {
     if (currentHotkeyType != HotKeyType.None)
     {
         var vk = e.KeyCode;
         if (vk == Keys.Escape)
         {
             e.Handled = true;
             ResetCurrentHotkey();
             return;
         }
         if (vk != Keys.LMenu && vk != Keys.RMenu
             && vk != Keys.LWin && vk != Keys.RWin
             && vk != Keys.LShiftKey && vk != Keys.RShiftKey
             && vk != Keys.LControlKey && vk != Keys.RControlKey)
         {
             e.Handled = true;
         }
         SetCurrentHotkeyInputText(e.ToString());
         currentHotkey = e;
     }
 }
예제 #10
0
 private void AddToCurrentWord(KeyboardEventArgs data) { currentWord.Add(data); }
예제 #11
0
 void ResetCurrentHotkey(bool clear)
 {
     switch (currentHotkeyType)
     {
         case HotKeyType.Switch:
             currentHotkey = clear ? null : settings.SwitchHotkey;
             break;
         case HotKeyType.Convert:
             currentHotkey = clear ? null : settings.ConvertSelectionHotkey;
             break;
         case HotKeyType.SwitchLayout:
             currentHotkey = clear ? null : settings.SwitchLayoutHotkey;
             break;
         default:
             currentHotkey = null;
             break;
     }
     SetCurrentHotkeyInputText(currentHotkey == null ? "None" : ReplaceCtrls(currentHotkey.ToString()));
 }
예제 #12
0
 private void AddToCurrentWord(KeyboardEventArgs data)
 {
     currentWord.Add(data);
 }
예제 #13
0
 // evtData.Handled must be set to true if the key is recognized as hotkey and doesn't need further processing
 private void ProcessKeyPress(object sender, KeyboardEventArgs evtData)
 {
     try
     {
         OnKeyPress(evtData);
     }
     catch (Exception ex)
     {
         OnError(ex);
     }
 }
예제 #14
0
        private void OnKeyPress(KeyboardEventArgs evtData)
        {
            var vkCode = evtData.KeyCode;

            if (evtData.Equals(SwitchHotkey))
            {
                ConvertLast();
                evtData.Handled = true;
                return;
            }

            if (evtData.Equals(ConvertSelectionHotkey))
            {
                ConvertSelection();
            }

            if (this.HaveTrackingKeys(evtData))
              return;

            var notModified = !this.HaveModifiers(evtData);

            if (vkCode == Keys.Space && notModified) { AddToCurrentWord(evtData); return; }
            if (vkCode == Keys.Back && notModified) { RemoveLast(); return; }
            if (IsPrintable(evtData))
            {
                if (GetPreviousVkCode() == Keys.Space) { BeginNewWord(); }
                AddToCurrentWord(evtData);
                return;
            }

            // default:
            BeginNewWord();
        }
예제 #15
0
        private bool HaveTrackingKeys(KeyboardEventArgs evtData)
        {
            var vkCode = evtData.KeyCode;

              return evtData.KeyCode == Keys.ControlKey ||
            vkCode == Keys.LControlKey ||
            vkCode == Keys.RControlKey ||
            // yes, don't interrupt the tracking on PrtSc!
            vkCode == Keys.PrintScreen ||
            vkCode == Keys.ShiftKey ||
            vkCode == Keys.RShiftKey ||
            vkCode == Keys.LShiftKey ||
            vkCode == Keys.NumLock ||
            vkCode == Keys.Scroll;
        }
예제 #16
0
        private bool HaveModifiers(KeyboardEventArgs evtData)
        {
            var ctrl = evtData.Control;
            var alt = evtData.Alt;
            var win = evtData.Win;

            return ctrl || alt || win;
        }