[Beispiel] - Benutzer einen beliebigen Hotkey auswählen lassen

  • Das Demo-Skript zeigt wie man einen Benutzer eine beliebige HotKey Kombination auswählen lassen kann.
    Gebraucht habe ich das für ein eigenes Programm - ich fand es schlicht unschön dort den Benutzer {F12} eingeben zu lassen,
    eine ComboBox fand ich ebenfalls "uncool".

    Ich habe in dem Skript eingeschränkt, das für einen HotKey mindestens eine der Tasten STRG, ALT oder WIN gedrückt sein muss.
    Zusätzlich kann der Benutzer die SHIFT Taste drücken sowie eine "frei" wählbare Taste.

    Leider habe ich für SetHotKey() nicht für alle Tasten ein Gegenstück gefunden (mit _IsPressed lässt sich mehr abfragen)

    Verbesserungsvorschläge, insbesondere Vereinfachungen werden gerne angenommen!

    Edit1 vom 17.11.2011:

    • _GetKeyCombination() gemäß Vorschlag von BugFix stark verkürzt
    • StringRegReplace Pattern verkürzt, unnötige Klammern entfernt
    • Rechschreibfehler korregiert


    Edit2 vom 17.11.2011:

    • Kommentare angepasst im Skript
    • Auch das Skript zum herunterladen aktualisiert


    Edit3 vom 17.11.2011:

    • Zeile 191 überarbeitet - der Benutzer konnte doch nur eine einzelne Taste ohne STRG, ALT oder WIN belegen da nicht darauf geprüft wurde


    Hier der Code, ich habe mich um reichlich Kommentare bemüht:


    BLinz

    • Offizieller Beitrag

    Schön gemacht, aber die Funktion " _GetKeyCombination" kann man etwas kürzen:

    Spoiler anzeigen
    [autoit]


    Func _GetKeyCombination()
    Local $sReturnstring
    For $i = 0 To 255
    If _IsPressed(Hex($i, 2)) Then $sReturnstring &= Hex($i, 2) & ' '
    Next
    Return StringTrimRight($sReturnstring, 1)
    EndFunc ;==>_GetKeyCombination

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Wenn Du sowieso einen String zurückgibst, kannst Du doch auch gleich den String generieren. Musst Du nicht den Umweg über ein Array machen. :)

    Mir ist noch ein Schreibfehler aufgefallen:

    Zitat

    "...es scheint dann eine Message Box."


    das sollte wohl eher:

    Zitat

    "...es erscheint dann eine Message Box."


    heißen.
    Außerdem etwas eher kosmetischer Natur. Wenn Du statt der doppelten Anführungszeichen die einfachen Anführungszeichen verwendest, kannst Du die doppelten für die Anzeige benutzen. Schwieriger Satz hier mal als Beispiel:
    Statt:

    [autoit]

    GUICtrlCreateLabel("Nach erfolgreicher Belegung steht die gewählte Kombination oben im 'Hotkey ist' Feld", 80, 120, 406, 17)

    [/autoit]


    lieber:

    [autoit]

    GUICtrlCreateLabel('Nach erfolgreicher Belegung steht die gewählte Kombination oben im "Hotkey ist" Feld', 80, 120, 406, 17)

    [/autoit]
  • Wenn Du statt der doppelten Anführungszeichen die einfachen Anführungszeichen verwendest, kannst Du die doppelten für die Anzeige benutzen


    Mhh ist mir bewusst - entweder die " " aussen und die ' im Text - oder umgekehrt - richtig?

    Deine Vorschläge teste ich heute Abend (mein StringRegExReplace kann auch noch kürzer, eleganter) und würde dann den ersten Beitrag aktualisieren.

    Danke für das durchprüfen!

    BLinz