Aktion nach einer bestimmten Tastenkombination weiterführen

  • Nabend

    Bei meinem Script hab ich einen Abschnitt, bei welchem ein Dialogfeld aufgeht, und sobald dann OK gedrückt wird, schliesst sich die Anwendung. Ich wäre allerdings glücklich, wenn ich das mit dem Dialogfeld weg lassen könnte, und es mit einer bestimmten Tastenkombination erledigen könnte. Also dass er die Anwendung schliesst, sobald eine bestimmte Taste, bzw. Tastenkombination gedrückt wurde. Ist das überhaupt möglich?

    Ahatius

    Einmal editiert, zuletzt von ahatius (1. Dezember 2008 um 07:39)

  • Ja das geht nehm einfach HotKeySet() damit kannst du festlegen mit welcher Tastenkombination welche Funktion ausgelöst werden soll.

    z.B:

    [autoit]

    HotKeySet("{ESC}","_Beenden")

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

    Func _Beenden()
    Exit
    EndFunc

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

    ; Tastenkombinationen (einfach auf Send klicken -> öffnet sich automatisch die Hilfe):
    Send()

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

    Alle Dinge um dir eine "Tastenkombination zusammenzustellen" gibt es in der Hilfe unter dem Suchbegriff: "Send"

    Mfg
    Jautois

  • Wenn mehrere tasten gedrückt werden sollen damit die Funktion aufgerufen wird dann kann man das mit _IsPressed() machen. Zum Beispiel so:

    [autoit]


    #Include <Misc.au3>
    Func _meinefunc()
    msgBox(0,"","a+b+c wurde gedrückt")
    EndFunc

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

    While 1
    If _IsPressed("41") and _IsPressed ("42") and _IsPressed("43") Then
    _meinefunc()
    EndIf
    WEnd

    [/autoit]
  • Also wenn ich das richtig verstanden habe, dient HotKeySet dazu, eine Tastenkombination, für eine Funktion zu definieren. Diese Funktion muss dann natürlich noch auch definiert werden. Da ich persönlich noch nie mit Func gearbeitet habe, poste ich mal meinen Versuch (welcher nicht geklappt hat).

    [autoit]

    Opt("TrayIconHide", 1)
    Opt("TrayIconDebug", 0)

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

    If FileExists (@UserProfileDir & "\Exist.txt") Then
    run(@ScriptDir & "\load.bat")
    sleep(2000)
    WinClose("Titel der Batchdatei")
    Else
    MsgBox(64, "Text", "Text")
    run(@ScriptDir & "\load.bat")
    sleep(2000)
    WinClose("Titel der Batchdatei")
    FileOpen(@UserProfileDir & "\Exist.txt", 8)
    FileWrite(@UserProfileDir & "\Exist.txt", "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & " -- " & @UserName & " started script successfully.")
    FileWrite(@UserProfileDir & "\Exist.txt", @CRLF & "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & " -- Don't remove this file. It's needed to check if you already started the script once.")
    EndIf

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

    WinActivate("Fenstertitel")
    HotKeySet("{LCTRL}P","_Beenden")

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

    Func _Beenden()
    WinKill("Fenstertitel")
    run("explorer.exe")
    Exit
    EndFunc

    [/autoit]


    Ich will eigtl. nicht mehr als dass er, beim drücken von Ctrl + P die Anwendung schliesst. Klappt aber irgendwie nicht.

  • [autoit]


    Opt("TrayIconHide", 1)
    Opt("TrayIconDebug", 0)

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

    If FileExists (@UserProfileDir & "\Exist.txt") Then
    run(@ScriptDir & "\load.bat")
    sleep(2000)
    WinClose("Titel der Batchdatei")
    Else
    MsgBox(64, "Text", "Text")
    run(@ScriptDir & "\load.bat")
    sleep(2000)
    WinClose("Titel der Batchdatei")
    FileOpen(@UserProfileDir & "\Exist.txt", 8)
    FileWrite(@UserProfileDir & "\Exist.txt", "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & " -- " & @UserName & " started script successfully.")
    FileWrite(@UserProfileDir & "\Exist.txt", @CRLF & "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & " -- Don't remove this file. It's needed to check if you already started the script once.")
    EndIf

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

    WinActivate("Fenstertitel")

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

    Func _Beenden()
    WinKill("Fenstertitel")
    run("explorer.exe")
    Exit
    EndFunc

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

    while 1
    If _ispressed ("12") and _ispressed ( "50") Then
    _Beenden()
    EndIf
    WEnd

    [/autoit]
  • Hi,
    war ja schon fast richtig ;).

    Man deklariert normalerweise die HotKeys an den Anfang.

    Dann hat noch die Schleife gefehlt. Die wird benötigt, damit das Programm sich nicht direkt schließt, wenn deine If-Anweisung durchlaufen ist.

    Spoiler anzeigen
    [autoit]

    Opt("TrayIconHide", 1)
    Opt("TrayIconDebug", 0)

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

    HotKeySet("^p", "_Beenden")

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

    If FileExists(@UserProfileDir & "\Exist.txt") Then
    Run(@ScriptDir & "\load.bat")
    Sleep(2000)
    WinClose("Titel der Batchdatei")
    Else
    MsgBox(64, "Text", "Text")
    Run(@ScriptDir & "\load.bat")
    Sleep(2000)
    WinClose("Titel der Batchdatei")
    FileOpen(@UserProfileDir & "\Exist.txt", 8)
    FileWrite(@UserProfileDir & "\Exist.txt", "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & " -- " & @UserName & " started script successfully.")
    FileWrite(@UserProfileDir & "\Exist.txt", @CRLF & "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & " -- Don't remove this file. It's needed to check if you already started the script once.")
    EndIf

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

    WinActivate("Fenstertitel")

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Beenden()
    WinKill("Fenstertitel")
    Run("explorer.exe")
    Exit
    EndFunc ;==>_Beenden

    [/autoit]

    _IsPressed ist hier eher Unbrauchbar, da das die CPUauslastung steigen lässt.
    Allerdings wird durch das HotkeySet auch die Tastenkombination gesperrt und von deinem Programm vollständig abgefangen.