Используйте глобальную горячую клавишу. Таким образом, вам не нужно беспокоиться о том, что ваше приложение имеет фокус. Хороший пример для VB.Net здесь:
http://www.kirsbo.com/How_to_add_global_hotkeys_to_applications_in_VB.NET
Резюмируя. Определение класса HotKey:
Public Class Hotkey
#Region "Declarations - WinAPI, Hotkey constant and Modifier Enum"
''' <summary>
''' Declaration of winAPI function wrappers. The winAPI functions are used to register/unregister a hotkey
''' </summary>
Public Declare Function RegisterHotKey Lib "user32" _
(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
Public Const WM_HOTKEY As Integer = &H312
Enum KeyModifier
None = 0
Alt = &H1
Control = &H2
Shift = &H4
Winkey = &H8
End Enum 'This enum is just to make it easier to call the registerHotKey function: The modifier integer codes are replaced by a friendly "Alt","Shift" etc.
#End Region
#Region "Hotkey registration, unregistration and handling"
Public Shared Sub registerHotkey(ByRef sourceForm As Form, ByVal triggerKey As String, ByVal modifier As KeyModifier)
RegisterHotKey(sourceForm.Handle, 1, modifier, Asc(triggerKey.ToUpper))
End Sub
Public Shared Sub unregisterHotkeys(ByRef sourceForm As Form)
UnregisterHotKey(sourceForm.Handle, 1) 'Remember to call unregisterHotkeys() when closing your application.
End Sub
Public Shared Sub handleHotKeyEvent(ByVal hotkeyID As IntPtr)
MsgBox("The hotkey was pressed")
End Sub
#End Region
End Class
Затем добавьте следующую Sub к вашей основной форме:
'System wide hotkey event handling
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = Hotkey.WM_HOTKEY Then
Hotkey.handleHotKeyEvent(m.WParam)
End If
MyBase.WndProc(m)
End Sub
Затем зарегистрировать HotKey в код запуска для вашей формы:
Hotkey.RegisterHotKey(Me, "X", Hotkey.KeyModifier.Alt)
Первый Параметр - это форма, вторая - ключ для обработки, а третий - ключ-модификатор. Как только этот Hotkey будет зарегистрирован, он вызывает код в HotKey.handleHotKeyEvent
.
Затем вы можете использовать какой-то Обратный вызов, чтобы вызвать метод в самой вызывающей форме, если вы этого желаете.
Возможный дубликат [VB.NET Обнаружение нажатия клавиши при минимизации] (http://stackoverflow.com/questions/5216222/vb-net-detecting-keypress-while-minimized) –