How to register hotkeys for your application in vb.net

This article is for how to register hotkeys for your application in vb.net.

Introduction:

How to perform various task or operation in application while it is not in focus (such as being minimized to tray). For example if we have a data entry application that is running in the system tray. When the user click on ALT + N keys, application will be display on the screen. and when user click on ALT + C, form will be hide and goes to system tray.
 

Idea behind the problem:

We can not use the Key press or key down event when the application has no focus. So we will register the hot keys (ALT + N and ALT + C) in vb.net. we will register ALT + N for showing the application and ALT + C fro hiding the application.
 

Code Example

Start a window application and add a form named Form1. Add some textbox and label controls and add a notify icon control on the Form1. Set the Form1’s property ShowinTaskbar to false and register the both hotkeys on the form1’s load event with the help of RegisterHotKey() function of the USer32.dll windows api.

Imports System.Runtime.InteropServices
Public Class Form1
    Public Const KEY_ALT As Integer = &H1
    Public Const _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, 1, KEY_ALT, Keys.N)
        RegisterHotKey(Me.Handle, 2, KEY_ALT, Keys.C)
    End Sub
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = _HOTKEY Then
            Dim id As IntPtr = m.WParam
            Select Case (id.ToString)
                Case "1"
                    Me.Show()
                    Me.WindowState = FormWindowState.Normal
                    Me.Activate()
                    Me.Focus()
                Case "2"
                    Me.Hide()
                    Me.WindowState = FormWindowState.Minimized
            End Select
        End If
        MyBase.WndProc(m)
    End Sub
 
    Private Sub Form1_FormClosing(ByVal sender As System.Object, _
                        ByVal e As System.Windows.Forms.FormClosingEventArgs) _
                        Handles MyBase.FormClosing
        UnregisterHotKey(Me.Handle, 1)
        UnregisterHotKey(Me.Handle, 2)
    End Sub
End Class

The above code will works as when user click ALT + C, the application will be hide and got to system tray, and when user press ALT + N, application will be appear.

Thanks