Hotkey 2 Keys gleichzeitig

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hotkey 2 Keys gleichzeitig

    Hey liebe Community. Ich stehe mal wieder vor einem Problem bei dem ich nicht weiter weiß und google konnte mir auch nicht helfen, wahrscheinlich weil ich keine Ahnung hab nach welchen Stichwörtern ich suchen muss.

    Also folgendes: Ich wollte für mein Programm einen globalen Hotkey einrichten mit dem dann Irgendwas ausgeführt wird. Den Code hierfür dachte ich mich bastle ich aus Keylogger-Tutorials, hat auch soweit funktioniert. Aber da das ganze ja global ist und ich als Hotkey z.b das 'S' festlege dann wird ja wenn ich ein .txt schreib die ganze Zeit mein Programm aufgerufen. ich hoffe man versteht was ich meine. Deshalb dachte ich an einen 'Doppelten Key': Also z.b Tab + S. Hier mein Code und das Problem:

    Das sind meine windows Deklarationen:

    VB.NET-Quellcode

    1. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    2. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)



    Das mein Loadevent und meine Regestrierung der Zwei Keys Tab + S :

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.Tab)
    3. RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.S)
    4. End Sub


    So und Jetzt der 'Problemsub' beim abfangen und auswerten. Ich habe das hier probiert zu lösen indem ich wenn ich tab drücke das als boolean speichere, wie euch aber bestimmt aufällt ist das auch sehr unzuverlässlich und Müll .

    VB.NET-Quellcode

    1. Public Tabstate As Boolean
    2. Protected Overrides Sub WndProc(ByRef m As Message)
    3. Debug.WriteLine(m.Msg.ToString & " " & m.WParam.ToString)
    4. If m.WParam = 1 Then
    5. Tabstate = True
    6. ElseIf m.WParam = 2 And Tabstate = True Then
    7. Debug.WriteLine("funzt")
    8. Tabstate = False
    9. Else
    10. Tabstate = False
    11. End If
    12. MyBase.WndProc(m)
    13. End Sub


    Speichern in einer Variable ob Tab gedrückt wurde habe ich gedacht weil man das ganze nicht in einer Sub Prozedur machen kann das bei diesem code ja m.WParem nicht 2 Werte haben kann!?

    VB.NET-Quellcode

    1. If m.WParam = 1 And m.WParam = 2 then


    Ich komm hier leider nicht weiter, wie kann man schauen ob 2 Tasten gleichzeitig gedrückt werden oder geht das gar nicht?

    Ich hoffe ihr könnt mir helfen den bisher hab ich immer nur mit den Key states im Programm gearbeitet :) Thx

    SidezockingLP schrieb:

    wie kann man schauen ob 2 Tasten gleichzeitig gedrückt werden oder geht das gar nicht?
    Mehrere gleichzeitig zu drücken ist schon hardwareseitig nur eingeschränkt vorgesehen.
    Nämlich es sind die Modifier-Tasten, die dafür vorgesehen sind:
    Shift, Strg, Alt
    Diese können beliebig untereinander kombiniert werden, und zusätzlich kann man eine beliebige Nicht-Modifier-Taste hinzunehmen.

    Ansonsten wie gesagt: Mehrere NIcht-Modifier als TastenKombi ist eiglich nicht vorgesehen. Sondern jeder Versuch, solch zu tun wird stattdessen als mehrere Tastendrücke hintereinander verarbeitet.

    Insbes die RegisterHotkey-Api unterstützt meines Wissens nur die hier skizzierten vorgesehenen TastenKombis.
    @Popa21 Ich weiß das das geht aber für mein Programm brauche ich eine globale Registrierung

    @ErfinderDesRades Danke für die Informationen. Hab bei der suche nach deinem Stichwort 'Modifier-Tasten' einen Eintrag mit deinem C# sample gefunden: Systemweite Tastenkombination abfragen

    Funktioniert :) Danke dir
    @SidezockingLP Wie wäre es mit GetAsyncKeyState(...)?
    Da kannst Du mehrere Tasten quasi gleichzeitig abfragen.
    Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!