Globale Hotkeys für 32 und 64bit

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Ganjin.

    Globale Hotkeys für 32 und 64bit

    Hallo,

    Man kann ja so für 32bit systeme globale hotkeys machen, bsp:

    Quellcode

    1. Public Class Form1
    2. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal key As Long) As Integer
    3. Dim hotkey As Boolean
    4. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    5. hotkey = GetAsyncKeyState(Keys.A)
    6. If hotkey = True Then
    7. MsgBox("lol")
    8. End If
    9. End Sub
    10. End Class

    Aber das geht nicht für 64bit user, auch nicht wenn man es in "User64" ändert.
    Wie kann man für beides Hotkeys machen?

    Grüße

    ryLIX schrieb:

    Hast du das Projekt runtergeladen oder die DLL?
    Das ist ne Komponente macht den Einsatz der Hooks sehr einfach :)
    ja aber irgentwie kapier ich nicht ganz wie das geht, und es funktioniert doch eh nicht für 32 und 64bit oder?
    (ja habe die dll in die toolbox importiert)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Ganjin“ ()

    Hast du dir die Demo dazu angeschaut?

    Eigentlich ist das ganze ziemlich einfach.

    Du plazierst die KeyboardHook Komponente auf dem Form.
    Nun kannst du in den Ereignissen wählen ob du auf KeyDown oder KeyUp reagieren möchtest.
    In der EreignissMethode selber hast du dann Zugriff auf die Tasten.

    VB.NET-Quellcode

    1. e.KeyValue

    Gibt dir den Wert des Keys mit dem du dann über die "Keys"-Enumeration von VB die Taste checken kannst.

    VB.NET-Quellcode

    1. Keys.S

    Wäre nun die Taste "S"

    VB.NET-Quellcode

    1. If e.KeyValue = Keys.S then
    2. 'Was auch immer tun
    3. End If


    Nun musst du noch entscheiden ab wann dieser Hook verfügbar sein soll.
    Du kannst das ganze über einen Button machen aber auch im Form.Load Ereigniss.

    VB.NET-Quellcode

    1. Try
    2. Me.KeyboardHook1.InstallHook()
    3. Catch ex As Exception
    4. MessageBox.Show(ex.Message)
    5. End Try

    Damit Installierst du den Hook.

    Du darfst auf keinen Fall vergessen den Hook wieder zu Deinstallieren.
    Auch hier wieder über Button oder über Form.Closing Ereigniss

    VB.NET-Quellcode

    1. Try
    2. Me.KeyboardHook1.RemoveHook()
    3. Catch ex As Exception
    4. MessageBox.Show(ex.Message)
    5. End Try


    Das ist alles.
    Da das ganze ein Wrapper für die WindowsAPI ist sollte es auf 32Bit und 64Bit laufen da ich im MSDN keine Hinweise gefunden habe das sich die API für die 64Bit Version geändert hat.
    Oh aber leider nur das Debuggen, sobald ich das programm in ein anderes verzeichnis verschiebe bekomm ich fehler beim starten.. bzw das programm stürzt ab.. :(
    kommt weil diese .dll i fehlt, sobald ich das mitkopiere geht das.. kann man die dll irgentwie in die .exe einbinden?

    Also wenn man diese WindowsHookLib.dll nicht in die .exe einbinden kann, dann ist das ganze sinnlos gewesen :wacko:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Ganjin“ ()