Benutzerdefinierter Hotkey

  • Hallo liebe Au3-Gemeinde,

    hat jemand von euch eine Idee warum das angehängte Script nicht funktioniert ?
    Zur Vorbeugung : Nein es wird kein Keylogger, da würde ich was anderes nehmen.

    Ich will das ein Nutzer bei Aufruf der Funktion maximal 2 Tasten drücken kann die dann so zu sagen
    als Benutzerdefinierter Hotkey funktionieren.

    Leider scheitert das ganze bei der Aufnahme der Hotkeys.

    Laut meinem Verständnis sollte das Script eigentlich so den Code des gedrückten Keys in die Konsole schreiben.
    Leider funktioniert das bei mir nicht.
    Auch nicht mit ReqAdmin.

    Vielleicht bin ich nur mal wieder etwas Blind trotz Brille, jedoch möchte ich euch bitten das mal an zu schauen ob jemand meinen Fehler findet.
    Suche wurde benutzt leider hab ich dazu nichts gefunden.


    //EDIT

    Der Code wurde wohl durch C&P verschoben. Sollte aber so zumindest teilweise funktionieren (evlt & _ anpassen)


    -

    Einmal editiert, zuletzt von Nachid (4. Januar 2016 um 21:15)

    • Offizieller Beitrag

    1. Da fehlt #include <Misc.au3>
    2. Deine Funktion TrackKey wird niemals aufgerufen.
    3. Dein Array macht keinen Sinn weil du nach der Tastenbezeichnung und nicht nach dem Scancode abfragts.
    Sinnvoller wäre For $i=0 To UBound($keyarray)-1 Step +2
    4. Deine Zeiweisung anhand der Ausgabe von _IsPressed ist vollkommener Humbug. _IsPressed liefert nur True und False zurück.
    Deine Zuweisung ist also immer 0 oder 1 (wenn die Abfrage mit dem richtigen Arrayindex geschehen würde).
    5. Die Schleife wird niemals verlassen, weil Abbruchbedingung niemals erfüllt wird.

  • _IsPressed() gibt nicht den Key sondern True/False zurück...$x hat nie den Wert von $keyarray[$i].
    Deshalb wird da nichts geschrieben.

    Edit: War wohl zu spät.
    Edit2: $i muss mit 0 nicht 1 initialisiert werden.

    Offtopic: IsPressed benötigt den VirtualKeycode nicht den ScanCode, weil Raupi das angesprochen hat.

    Einmal editiert, zuletzt von CentuCore (4. Januar 2016 um 21:47)

  • Vielen Dank das hat ich übersehen.
    @Raupi
    1. Im Hauptscript
    2. Funktionsaufruf ist im Hauptscript - nicht online
    3. Vielen Dank - mir nicht aufgefallen da ich normal ab 1 arbeite... Danke !
    4. Nein kein Humbug - da wenn ich a drücke und kein true kommt die Ausgabe wohl nicht eingeleitet wird
    -> Ergo : geht nicht weil iwo Fehler (siehe 3)
    5. Programm sah anders aus. Das keine Abbruchbedingung vorhanden war sollte das Problem vereinfachen.
    -> Abbruch bedingung wird gesetzt indem $TrackKeys = False wenn ESC oder 2. Knopf gedrückt wurde.


    Vielen dank für eure Hilfe :)

    -

    • Offizieller Beitrag

    Beispiel:

  • Meine Lösung
    VIelen Dank an Raupi und CentuCore

    -

  • Du kannst dein If-Else noch "wegoptimieren" indem du folgendes machst:

    AutoIt
    ;Statt If-Else
    $TrackKeys = $pressed == ""
    $pressed &= $keyarray[$i] & "+"
    $pos = MouseGetPos()
    ToolTip("")
    ToolTip ("Recognized "&$keyarray[$i+1],$pos[0],$pos[1],"Info",1,7)
    
    
    ;Nach der Schleife
    $pressed = StringTrimRight($pressed, 1)