private IntPtr HwndHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            const int WM_HOTKEY = 0x0312;

            if (msg == WM_HOTKEY)
            {
                int id     = wParam.ToInt32();
                var hotkey = _registeredHotkeys.FirstOrDefault(x => x.Id == id);

                if (hotkey != null)
                {
                    if (_requireActiveEveClient && !_windowHelper.IsEveClientActive())
                    {
                        handled = false;
                    }
                    else
                    {
                        var keyEventArgs = new HotkeyEventArgs(hotkey.Gesture);
                        HotkeyPressed?.Invoke(this, keyEventArgs);
                        handled = keyEventArgs.Handled;
                    }

                    if (!handled)
                    {
                        HotkeyNativeMethods.UnregisterHotKey(_handle, hotkey.Id);
                        KeyboardMessage.Send(hotkey.Gesture);
                        HotkeyNativeMethods.RegisterHotKey(_handle, hotkey.Id, hotkey.Modifiers, hotkey.VirtualKey);
                    }
                }
            }

            return(IntPtr.Zero);
        }
Пример #2
0
        private void HotkeyHandler_HotkeyPressed(object sender, HotkeyEventArgs e)
        {
            var hotkey = e.Gesture.GetDisplayStringForCulture(CultureInfo.CurrentCulture);

            if (hotkey == _config.LoginScreenHotkey)
            {
                e.Handled = SelectNextLoginScreen();
                return;
            }

            var    characters      = _windowHelper.GetActiveCharacters(_config.Hotkeys[hotkey]);
            string activeCharacter = _windowHelper.GetActiveCharacter();
            string newActiveCharacter;

            if (characters.Contains(activeCharacter))
            {
                var index = Array.IndexOf(characters, activeCharacter) + 1;

                if (index >= characters.Length)
                {
                    index = 0;
                }

                newActiveCharacter = characters[index];
            }
            else
            {
                _lastActiveCharacterForHotkey.TryGetValue(hotkey, out string lastActiveCharacter);

                if (characters.Contains(lastActiveCharacter))
                {
                    newActiveCharacter = lastActiveCharacter;
                }
                else
                {
                    newActiveCharacter = characters.FirstOrDefault();
                }
            }

            Debug.WriteLine($"Hotkey: {hotkey}, ActiveCharacter: {activeCharacter}, NewActiveCharacter: {newActiveCharacter}");

            if (newActiveCharacter != null)
            {
                _windowHelper.SetActiveCharacter(newActiveCharacter);
                _lastActiveCharacterForHotkey[hotkey] = newActiveCharacter;
                e.Handled = true;
            }
        }