在WPF MVVM应用程序中注册全局OS级热键

时间:2014-02-25 19:45:22

标签: c# wpf vb.net mvvm hotkeys

我正在尝试将一些密钥注册为热键,这些热键不仅在全局应用程序范围内运行,而且即使在应用程序没有焦点时也会被捕获。我非常清楚这样做的事实并不是一个好主意,并且有足够的理由去做。

应用程序是使用MVVM编写的,MainWindow甚至没有代码隐藏文件。如果我确实使用了代码隐藏,我需要在MainViewModel类文件中绑定命令,该文件用作MainWindow的DataContext。

我使用代码隐藏设置了一个测试应用程序class written by Eric Ouellet并且效果很好。但是,当我在MainViewModel中注册HotKey时,Action - OnHotKeyHandler - 永远不会触发。

我的精简代码看起来像这样。它是VB.NET,我上面链接的类是C#,所以我将它编译为C#类库并在我的引用中设置它。我在任何时候都没有收到任何错误消息,在实际代码中我不会吞下异常。我的MainWindow真的绑定到这个类,调试显示它已被实例化。

Public Class MainViewModel
    Private Shared _hotKeyF4 As GlobalHotKey.HotKey

    Public Sub New()
        _hotKeyF4 = New GlobalHotKey.HotKey(Key.F4, GlobalHotKey.KeyModifier.None, OnHotKeyHandler, True)
    End Sub

    Private Function OnHotKeyHandler() As Action(Of GlobalHotKey.HotKey)
        Debug.Print("F4 was pressed") 'Never fires
    End Function
End Class

如果我不能使这个特定的类/方法工作,那没关系。我只需要一些方法来全局监听(操作系统级别)WPF MVVM应用程序内部的按键。 C#代码很好,因为我将转换它或编译它,无论哪个最有意义。

注意:看起来我找到了一个solution which was just recently written,但是如果我选择的HotKey已被分配给其他东西,我会遇到一些问题,因为它会抛出未处理的异常。< / p>

0 个答案:

没有答案