GlobalHotkey gedrückte Keys abfragen [vb2008]

DerStauner

Erfahrenes Mitglied
Hallo!

Ich habe folgendes Problem:

ich habe ein hotkeys Class, mit dessen Hilfe ich Hotkeys global registrieren kann. Funktioniert auch wunderschön. Dazu der Code:

Code:
Public Class hotkeys
    Inherits System.Windows.Forms.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
    Public Class MODKeys
        Public Const MOD_ALT As Integer = 1
        Public Const MOD_CONTROL As Integer = 2
        Public Const MOD_SHIFT As Integer = 4
        Public Const MOD_WIN As Integer = 8
    End Class
    Dim hotkeyID As Short
    Public Sub New(ByVal sKey As System.Windows.Forms.Keys, Optional ByVal _
    Modulate As Long = 0)
        RegisterGlobalHotKey(sKey, Modulate)
    End Sub
    Private Sub RegisterGlobalHotKey(ByVal hotkey As System.Windows.Forms.Keys, _
    ByVal modifiers As Integer)
        Try
            Dim atomName As String = _
            AppDomain.GetCurrentThreadId.ToString("X8") & Me.Name
            hotkeyID = GlobalAddAtom(atomName)
            RegisterHotKey(Me.Handle, hotkeyID, modifiers, CInt(hotkey))
        Catch ex As Exception
            UnregisterGlobalHotKey()
        End Try
    End Sub
    Private Sub UnregisterGlobalHotKey()
        If Me.hotkeyID <> 0 Then
            UnregisterHotKey(Me.Handle, hotkeyID)
            GlobalDeleteAtom(hotkeyID)
            hotkeyID = 0
        End If
    End Sub
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
        Const WM_HOTKEY As Integer = &H312
        If m.Msg = WM_HOTKEY Then
            MsgBox("Hotkey wurde gedrückt.")
        End If
    End Sub
End Class

Im fett gedruckten Bereich kann ich bestimmen, was passiert, wenn ein globales Hotkey gedrückt wird.

Die Hotkeys registriere ich so (z. B. im Load Event des Forms):

Code:
Dim HotKeyElement As New hotkeys(Keys.A)
Dim HotkeyElement1 As New hotkeys(Keys.B)

Damit sind die Keys "A" und "B" registriert. Mit einem Notifyicon schicke ich das Programm ins Tray, und wenn ich jetzt A oder B drücke, kommt ein MsgBox auf.

Aber wie kann ich abfragen, welche Taste von den beiden gedrückt wurde? So, dass Z. B. der MsgBox sagt: Die Taste "A" wurde gedrückt.

Danke.
 
Hi

Die Info solltest du eigentlich in den Propertys WParam bzw. LParam finden

Ich denke, LParam ist das richtige, da WParam immer derselbe Wert zurückgibt, egal, welche Taste gedrückt wurde. Aber bei LParam sind die Werte immer anders. Ich muss nur noch diese Werte sammeln, und mit dem LParam Wert der gedrückten Taste vergleichen, und habe erreicht, was ich wollte.
 
nein, ich mache es nicht beruflich, es ist nur ein Hobby.

hauptsächlich geht es bei mir um das "Wie" (wie man das programmiert, also um den Code), und nicht um die Theorie.

Z. B. wenn ich ein Problem habe, dann suche ich im Internet oder frage ich hier nach, und bekomme dann eine Antwort, und dann die Einsicht: aha, so wird es gemacht. Und ich merk' es mir. Theorie ist bei mir nur Nebensache.
 
Zurück