Хорошо, я сделал это! Добавление глобальной горячей клавиши с использованием WPF и VB.NET может быть сделано путем добавления этих ссылок (Mainwindow.xmal.vb):
Imports System.Runtime.InteropServices
Imports System.Windows.Interop
Затем добавив следующий Кодекс за:
<DllImport("User32.dll")> _
Private Shared Function RegisterHotKey(<[In]> hWnd As IntPtr, <[In]> id As Integer, <[In]> fsModifiers As UInteger, <[In]> vk As UInteger) As Boolean
End Function
<DllImport("User32.dll")> _
Private Shared Function UnregisterHotKey(<[In]> hWnd As IntPtr, <[In]> id As Integer) As Boolean
End Function
Private _source As HwndSource
Private Const HOTKEY_ID As Integer = 9000
Protected Overrides Sub OnSourceInitialized(e As EventArgs)
MyBase.OnSourceInitialized(e)
Dim helper = New WindowInteropHelper(Me)
_source = HwndSource.FromHwnd(helper.Handle)
_source.AddHook(AddressOf HwndHook)
RegisterHotKey()
End Sub
Protected Overrides Sub OnClosed(e As EventArgs)
_source.RemoveHook(AddressOf HwndHook)
_source = Nothing
UnregisterHotKey()
MyBase.OnClosed(e)
End Sub
Private Sub RegisterHotKey()
Dim helper = New WindowInteropHelper(Me)
Const VK_F10 As UInteger = &H79
Const MOD_CTRL As UInteger = &H2
' handle error
If Not RegisterHotKey(helper.Handle, HOTKEY_ID, MOD_CTRL, VK_F10) Then
End If
End Sub
Private Sub UnregisterHotKey()
Dim helper = New WindowInteropHelper(Me)
UnregisterHotKey(helper.Handle, HOTKEY_ID)
End Sub
Private Function HwndHook(hwnd As IntPtr, msg As Integer, wParam As IntPtr, lParam As IntPtr, ByRef handled As Boolean) As IntPtr
Const WM_HOTKEY As Integer = &H312
Select Case msg
Case WM_HOTKEY
Select Case wParam.ToInt32()
Case HOTKEY_ID
OnHotKeyPressed()
handled = True
Exit Select
End Select
Exit Select
End Select
Return IntPtr.Zero
End Function
Private Sub OnHotKeyPressed()
MsgBox("Hello world!")
End Sub
Это для Ctrl + F10. Его можно изменить, изменив следующее в соответствии с Keycodes от here и модификаторами Key от here. Просто замените 0x с & H.
Const VK_F10 As UInteger = &H79
Const MOD_CTRL As UInteger = &H2
Надежда это помогает кому-то. Кредит переходит на «макс», из которого код был преобразован: Global hotkeys in WPF working from every window
Возможный дубликат http://stackoverflow.com/questions/2450373/set-global-hotkeys-using-c-sharp? – Kelly