FAQ: How do I register a hotkey in VB.NET? RRS feed


  • Firstly, you need to know the Virtual-Key Codes.



    You can then P/Invoke RegisterHotKey/UnregisterHotKey APIs to register/Unregister the hotkey.


    Code sample: Register multiple hotkeys such as Alt+D, Alt+C, etc.

    Imports System.Runtime.InteropServices
    Public Class Form1
        Public Const MOD_ALT As Integer = &H1 'Alt key
        Public Const WM_HOTKEY As Integer = &H312
        <DllImport("User32.dll")> _
        Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, _
                            ByVal id As Integer, ByVal fsModifiers As Integer, _
                            ByVal vk As Integer) As Integer
        End Function
        <DllImport("User32.dll")> _
        Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, _
                            ByVal id As Integer) As Integer
        End Function
        Private Sub Form1_Load(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) Handles MyBase.Load
            RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
            RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
        End Sub
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            If m.Msg = WM_HOTKEY Then
                Dim id As IntPtr = m.WParam
                Select Case (id.ToString)
                    Case "100"
                        MessageBox.Show("You pressed ALT+D key combination")
                    Case "200"
                        MessageBox.Show("You pressed ALT+C key combination")
                End Select
            End If
        End Sub
        Private Sub Form1_FormClosing(ByVal sender As System.Object, _
                            ByVal e As System.Windows.Forms.FormClosingEventArgs) _
                            Handles MyBase.FormClosing
            UnregisterHotKey(Me.Handle, 100)
            UnregisterHotKey(Me.Handle, 200)
        End Sub
    End Class


    Related thread:



    For more FAQ about Visual Basic .NET General, please see Visual Basic .NET General FAQ


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    Friday, April 10, 2009 3:17 PM