Currently im trying to write a HotKey class, however in order to intercept the messages you need to overwrite the WndProc and check for WM_HOTKEY.
Currently, im using Inherits Form inside of the class, so that it has the option of overwriding the wndproc, but along with that I get all the forms normal events when trying to handle it.
Below is my code:
That works perfectly fine, its just that I dont want hk1 to be able to handle other things other than the HotKey_Pressed event...Code:Public Class Form1 Private Class HotKey Inherits Form Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Short Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Short) As Short Private Const WM_HOTKEY As Integer = &H312 Public hkID As Integer = 0 Public Shared Event HotKey_Pressed() Public Enum ModKeys MOD_ALT = 1 MOD_CONTROL = 2 MOD_SHIFT = 4 MOD_WIN = 8 MOD_NONE = 0 End Enum Public Sub New(ByVal ModKey As ModKeys, ByVal Key As Keys) Dim atomName As String = Process.GetCurrentProcess.Id.ToString("X8") & Me.Name hkID = GlobalAddAtom(atomName) If RegisterHotKey(Me.Handle, hkID, ModKey, CInt(Key)) = 0 Then hkID = 0 MsgBox("Unable to register hotkey. Error code: " & System.Runtime.InteropServices.Marshal.GetLastWin32Error.ToString) Me.Finalize() End If End Sub Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) MyBase.WndProc(m) If m.Msg = WM_HOTKEY Then If m.WParam.ToString = hkID Then RaiseEvent HotKey_Pressed() End If End If End Sub Protected Overrides Sub Finalize() Try GlobalDeleteAtom(hkID) UnregisterHotKey(Me.Handle, hkID) Catch ex As Exception End Try MyBase.Finalize() End Sub End Class Private WithEvents hk1 As New HotKey(HotKey.ModKeys.MOD_WIN, Keys.BrowserHome) Private Sub hk1_HotKey_Pressed() Handles hk1.HotKey_Pressed MsgBox("test") End Sub End Class




Reply With Quote