#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. Сборка формы)