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); }
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; } }