WPF Global Hotkey使用鼠标按钮

时间:2016-10-13 02:57:32

标签: 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=vs.85).aspx

VK_MBUTTON 0x04鼠标中键(三键鼠标)

每当我尝试将热键更改为任何列出的键时,它都可以正常工作,除了鼠标按钮..任何人都知道为什么会发生这种情况以及如何解决它?

1 个答案:

答案 0 :(得分:3)

CapsLock 密钥,因此可以注册为HotKey。鼠标中键是按钮,而不是键。您根本无法使用相同的本机方法/代码。

我建议您为您的应用程序采用globalmousekeyhook库。在这种情况下,您在Magnus Montin's blog上找到的样本将变为:

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.Forms程序集,我不知道它是否可以为你所接受。