modernaesthetics icon

Global Hotkeys - VB.NET

modernaesthetics | PRO | 06/07/18 05:32:04 PM UTC | 0 ⭐ | 339 👁️ | Never ⏰ | []
VB.NET |

2.85 KB

|

None

|

0 👍

/

0 👎

'Out of date, will update eventually.
 
    Class Shortcut
        Inherits NativeWindow
        Implements IDisposable
 
#Region " Declarations "
        Protected Declare Function UnregisterHotKey Lib "user32.dll" (ByVal handle As IntPtr, ByVal id As Integer) As Boolean
        Protected Declare Function RegisterHotKey Lib "user32.dll" (ByVal handle As IntPtr, ByVal id As Integer, ByVal modifier As Integer, ByVal vk As Integer) As Boolean
 
        Event Press(ByVal sender As Object, ByVal e As HotKeyEventArgs)
        Protected EventArgs As HotKeyEventArgs, ID As Integer
 
        Enum Modifier As Integer
            None = 0
            Alt = 1
            Ctrl = 2
            Shift = 4
        End Enum
        Class HotKeyEventArgs
            Inherits EventArgs
            Property Modifier As Shortcut.Modifier
            Property Key As Keys
        End Class
        Class RegisteredException
            Inherits Exception
            Protected Const s As String = "Shortcut combination is in use."
            Sub New()
                MyBase.New(s)
            End Sub
        End Class
#End Region
 
#Region " IDisposable "
        Private disposed As Boolean
        Protected Overridable Sub Dispose(ByVal disposing As Boolean)
            If Not disposed Then UnregisterHotKey(Handle, ID)
            disposed = True
        End Sub
        Protected Overrides Sub Finalize()
            Dispose(False)
            MyBase.Finalize()
        End Sub
        Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
#End Region
 
        Sub New(ByVal modifier As Modifier, ByVal key As Keys)
            CreateHandle(New CreateParams)
            ID = GetHashCode()
            EventArgs = New HotKeyEventArgs With {.Key = key, .Modifier = modifier}
            If Not RegisterHotKey(Handle, ID, modifier, key) Then Throw New RegisteredException
        End Sub
        Shared Function Create(ByVal modifier As Modifier, ByVal key As Keys) As Shortcut
            Return New Shortcut(modifier, key)
        End Function
 
        Protected Sub New()
        End Sub
        Protected Overrides Sub WndProc(ByRef m As Message)
            Select Case m.Msg
                Case 786
                    RaiseEvent Press(Me, EventArgs)
                Case Else
                    MyBase.WndProc(m)
            End Select
        End Sub
    End Class
 
   
    'Usage:
    Dim WithEvents T As Shortcut
    Private Sub Form_Load() Handles MyBase.Load
        T = Shortcut.Create(Shortcut.Modifier.Alt, Keys.E)
        'T = Shortcut.Create(Shortcut.Modifier.Alt Or Shortcut.Modifier.Shift, Keys.E)
    End Sub
    Private Sub T_Press(ByVal s As Object, ByVal e As Shortcut.HotKeyEventArgs) Handles T.Press
        MessageBox.Show("hello")
    End Sub

Comments