【问题标题】:WPF Global Hotkey using the mouse button使用鼠标按钮的 WPF 全局热键
【发布时间】:2017-02-22 00:29:03
【问题描述】:

所以,我正在使用这个示例在 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 鼠标中键(三键鼠标)

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    CapsLock 是一个key,因此可以注册为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 程序集,我不知道你是否可以接受。

    【讨论】:

    • windows.forms 会有什么问题?我不能在 WPF 应用程序中使用它?
    • 您可以在 WPF 应用程序中使用它@raphadko。关键是您引用了一个并非绝对必要的程序集(WPF 应用程序可以在没有 System.Windows.Form 程序集的情况下工作)
    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 2016-01-14
    • 2011-04-01
    • 2010-11-19
    • 2019-06-12
    • 1970-01-01
    • 2015-02-15
    • 2016-05-10
    相关资源
    最近更新 更多