Глобальная горячая клавиша WPF с помощью кнопки мыши

#c# #wpf

#c# #wpf

Вопрос:

Итак, я использую этот пример для создания глобальной горячей клавиши в приложении WPF:

https://blog.magnusmontin.net/2015/03/31/implementing-global-hot-keys-in-wpf/

Это довольно просто и работает нормально… но всякий раз, когда я пытаюсь изменить клавишу на кнопку мыши, например, среднюю, она просто не работает… В списке ключей из msdn есть:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731 (v= против 85).aspx

VK_MBUTTON 0x04 Средняя кнопка мыши (трехкнопочная мышь)

Всякий раз, когда я пытаюсь изменить горячую клавишу на любую из перечисленных клавиш, она работает нормально, за исключением кнопок мыши.. кто-нибудь знает, почему это происходит и как это исправить?

Ответ №1:

CapsLock является ключом, поэтому может быть зарегистрирован как HotKey . Средняя кнопка мыши — это кнопка, а не клавиша. Вы просто не можете использовать один и тот же собственный метод / код.

Я предлагаю вам использовать библиотеку globalmousekeyhook для вашего приложения. В этом случае образец, который вы найдете в блоге Магнуса Монтина, станет:

 public partial class MainWindow : Window
{
    private IKeyboardMouseEvents m_GlobalHook;

    public MainWindow()
    {
        InitializeComponent();
    }

    protected override void OnSourceInitialized(EventArgs e)
    {
        m_GlobalHook = Hook.GlobalEvents();
        m_GlobalHook.MouseClick  = m_GlobalHook_MouseClick;

        base.OnSourceInitialized(e);
    }

    private void m_GlobalHook_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Middle)
        {
            tblock.Text  = "Middle mouse button clicked"   Environment.NewLine;
        }
    }

    protected override void OnClosed(EventArgs e)
    {
        m_GlobalHook.MouseClick -= m_GlobalHook_MouseClick;
        m_GlobalHook.Dispose();

        base.OnClosed(e);
    }
}
  

Единственная проблема заключается в том, что библиотека globalmousekeyhook ссылается на System .Windows.Формирует сборку, и я не знаю, может ли это быть приемлемым для вас.

Комментарии:

1. В чем может быть проблема с windows.forms? Я не могу использовать его в приложении WPF?

2. Вы можете использовать его @raphadko в приложении WPF. Дело в том, что вы ссылаетесь на не совсем необходимую сборку (приложения WPF могут работать без System. Windows. Сборка формы)