Im Setup meines Programmes Benutzer beliebigen Hotkey per Tastendruck festlegen lassen - wie?

  • Beitrag ist gelöst - Lösung findest du hier: https://autoit.de/index.php?page=Thread&threadID=29762


    Moin,

    ich schreibe mir gerade einen kleinen Up- und Downloader (Ich muss nach jeder Änderung eine Datei von Hand auf einen Testrechner schieben und dort ausprobieren - Das macht nun AutoIt für mich).

    Mein Programm hat auch ein kleines Setup - unter anderem für den Hotkey der verwendet wird (siehe Bildanhang Hotkey.JPG)
    Hier kann man in passender Schreibweise den gewünschten Hotkey eintippen (ich formatiere den Key nach der Eingabe nach, mit { } etc).

    Schöner wäre es, wenn ich einn Button "Taste auswählen" machen könnte, ich ein Popup öffne wo ich bitte den Benutzer ein beliebige Taste zu drücken - und hinter weis welche es war.

    Es muss garnicht die Tastenkombination sein - nur welchen Buchstaben / Zahlen / F- oder sonstwie Taste .

    Danke!

    BLinz

  • Hab was gefunden ;) , ein Script von SEuBo.. sollte genau das sein was du suchst ;)

    Spoiler anzeigen
    [autoit]


    Dim $rKEYLIST[113][2] = [ _
    ["01", "Left"],["02", "Right"],["04", "Middle"],["05", "Windows 2000/XP: X1"],["06", "Windows 2000/XP: X2"],["08", "BACKSPACE"],["09", "TAB"],["0C", "CLEAR"],["0D", "ENTER"],["13", "PAUSE"],["14", "CAPSLOCK"],["1B", "ESC"],["20", "SPACE"],["21", "PGUP"],["22", "PGDN"],["23", "END"],["24", "HOME"],["25", "LEFT"],["26", "UP"],["27", "RIGHT"],["28", "DOWN"],["29", "SELECT"],["2A", "PRINT"],["2B", "EXECUTE"],["2C", "PRINTSCREEN"],["2D", "INS"],["2E", "DEL"], _
    ["30", "0"],["31", "1"],["32", "2"],["33", "3"],["34", "4"],["35", "5"],["36", "6"],["37", "7"],["38", "8"],["39", "9"],["41", "A"],["42", "B"],["43", "C"],["44", "D"],["45", "E"],["46", "F"],["47", "G"],["48", "H"],["49", "I"],["4A", "J"],["4B", "K"],["4C", "L"],["4D", "M"],["4E", "N"],["4F", "O"],["50", "P"],["51", "Q"],["52", "R"],["53", "S"],["54", "T"],["55", "U"],["56", "V"],["57", "W"],["58", "X"],["59", "Y"],["5A", "Z"],["5B", "LWIN"],["5C", "RWIN"], _
    ["60", "NUMPAD0"],["61", "NUMPAD1"],["62", "NUMPAD2"],["63", "NUMPAD3"],["64", "NUMPAD4"],["65", "NUMPAD5"],["66", "NUMPAD6"],["67", "NUMPAD7"],["68", "NUMPAD8"],["69", "NUMPAD9"],["6A", "Multiply"],["6B", "NUMPADADD"],["6C", "Separator"],["6D", "NUMPADSUB"],["6E", "NUMPADDOT"],["6F", "NUMPADDIV"],["70", "F1"],["71", "F2"],["72", "F3"],["73", "F4"],["74", "F5"],["75", "F6"],["76", "F7"],["77", "F8"],["78", "F9"],["79", "F10"],["7A", "F11"],["7B", "F12"],["7C-7F", "F13 - F16"],["80-87H", "F17 - F24"], _
    ["90", "NUMLOCK"],["91", "SCROLLLOCK"],["A4", "TAB"],["A5", "Right MENU"],["BA", ";"],["BB", "="],["BC", ","],["BD", "-"],["BE", "."],["BF", "/"],["C0", "`"],["DB", "["],["DC", "\"],["DD", "]"] _
    ]

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

    $dll = DllOpen("user32.dll")

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

    #include <GUIConstants.au3>
    #include <Misc.au3>
    #region - GUI Create
    $hGUI = GUICreate('Test')
    $hButton = GUICtrlCreateButton("Choose Hotkey",100,300)
    $hLable = GUICtrlCreateLabel("No Hotkey",20,20,250,250)
    GUICtrlSetFont(-1,20)
    GUISetState()
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hButton
    _ChangeHotKey()
    EndSwitch
    WEnd
    #endregion

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

    Func _ChangeHotKey()
    Local $WaitForHK = True, $CTRLK
    GUICtrlSetData($hLable,"Waiting...")
    While $WaitForHK
    For $i = 5 to UBound($rKEYLIST)-1
    If _IsPressed($rKEYLIST[$i][0],$dll) Then

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

    If _IsPressed(10, $dll) Then $CTRLK &= "SHIFT+"
    If _IsPressed(11, $dll) Then $CTRLK &= "STRG+"
    If _IsPressed(12, $dll) Then $CTRLK &= "ALT+"

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

    Do
    Sleep(10)
    Until Not _IsPressed($rKEYLIST[$i][0], $dll)

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

    GUICtrlSetData($hLable,$CTRLK&$rKEYLIST[$i][1])
    $WaitForHK = False
    Return 1
    EndIf
    Next
    WEnd
    EndFunc

    [/autoit]
  • Danke - warum habe ich das nicht selbet gefunden ...

    Das Skript funktioniert bei mir zwar nicht 100%tig (ALT - Tastendrücke interprtiert er falsch),

    ich müsste aber etwas daraus bauen können :) :P


    Wenn ich meine Lösung fertig habe stelle ich die Lösung hier Online und stelle den Staus auf "gelöst"

  • Mhh Danke chip ...

    Ich bin gerade am Basteln ... STRG und / oder SHIFT + Taste abzufragen ist kein Problem - mit der ALT Taste hakt es.

    Lauf Hilfe von _IsPressed ist der Wert für ALT = 12 ...
    er gibt mir aber A4 zurück - auch nicht ganz verkehrt, ist ja "linke Ctrl/Strg-Taste" ....

    Ich bin noch am Testen ob man nicht auch die ALT-Taste mit diesem Prinzip zum laufen bekommt.

    Mein Grundwunsch ist erfüllt - die meisten Tasten könnten so eben Abgefragt werden - in meiner GUI lasse ich ja bisher auch die STRG / ALT / SHIFT Kombinationen auswählen und will nur noch die Zusatztaste ...

    Aber es ganz mit Tastenkombination zu machen wäre natürlich auch Cool.

    BLinz

    EDIT1: Nah ich habs gleich - die Abfrage muss etwas Komlexer werden dann geht es - er sendet 12 UND A4 ... heute Abend gibt es eine Lösung ....
    EDIT2: chip - dein Post hat es erleicherter - das Script dort zeigt immer die gerdückten Tasten an - hätte ich auch selbst darauf kommen können .....