Skript komplett pausieren

  • Guten Abend,

    ich mache eine Ausbildung zum technischen Zeichner und wir arbeiten mit einer 3D Haustechnik Software.
    Leider gibt es soviele "Funktionen" das nicht für alles einen Hotkey gibt.
    Ich habe mich heute rangesetzt und ein bisschen was geskript. Alles funktioniert super.

    Das einzige Problem was ich zur Zeit habe ist, das wenn ich einen Text bearbeiten will ich teilweise auf meine AutoIt Hotkeys komme, dann wird natürlich die betreffende Funktion ausgeführt. Allerdings kann ich den Text nicht bearbeiten.

    Gibt es einen Weg mein Programm per Func komplett zu pausieren und auf Knopfdruck wieder zu "aktivieren"?
    Ich hoffe ihr versteht mein Problem :huh:

    Grüße
    Stuuhl

  • Vielen Dank für die schnelle Antwort?
    Kannst du mir evtl ein Beispiel mit 2 Hotkeys und 2 Func tippen, ganz durchgestiegen bin ich leider nicht.:/

    Ich werde das Morgenfrüh gleich umsetzen.
    Danke im Vorraus.

    LG

    Stuuhl

    • Offizieller Beitrag

    Benutzt du eine Gui in deim Script? Wenn ja kannst du anstatt der Hotkeys auch Accelerator benutzen.

    [autoit]

    GUISetAccelerators

    [/autoit]
    • Offizieller Beitrag

    autoBert, was willst du uns mit dem leeren Post sagen? 8|:whistling:

  • Spoiler anzeigen
    [autoit]

    Global $bHotkeys, $aHotkeys[3][2] = [["{ESC}","_ESCBenutzt"],["1","_Eins"],["7","_Sieben"]]

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

    HotKeySet("{UP}","_ToogleHotkeys")

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

    While Sleep(500)
    WEnd

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

    Func _ToogleHotkeys()
    Local $sKey = ""
    For $i = 0 To UBound($aHotkeys,1)-1
    If $bHotkeys Then
    HotKeySet($aHotkeys[$i][0])
    Else
    HotKeySet($aHotkeys[$i][0],$aHotkeys[$i][1])
    EndIf
    Next
    $bHotkeys = Not $bHotkeys
    EndFunc

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

    Func _EScBenutzt()
    MsgBox(0,"Dummy","_ESCBenutzt")
    EndFunc

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

    Func _Eins()
    MsgBox(0,"Dummy","_Eins")
    EndFunc

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

    Func _Sieben()
    MsgBox(0,"Dummy","_Sieben")
    EndFunc

    [/autoit]

    Oder so :P

    LG
    Christoph :)

  • howdy!

    vlt hab ich was überlesen aber würde es vlt auch eine überprüfung tun ob das autoit fenster aktuell aktiv ist?

    also immer wenn das fenster inaktiv ist, deaktivieren sich alle hotkeys und andersherum

    mfg
    sgtigram

  • also immer wenn das fenster inaktiv ist, deaktivieren sich alle hotkeys und andersherum

    Dies wäre sogar die beste Methode, da aber mein Skript einen Ziffernblock simuliert (es soll Notebooks geben die einen Zifferblock noch nicht einmal auf der Tastatur umschaltbar haben) der für alle Anwendungen verfügbar ist war dies nicht möglich.

    mfg autoBert

  • Ich habe mal meinen Code eingefügt. Allerdings benötige ich im Moment 2 Knöpfe um die Hotkeys auszustellen, das wollte ich ja vermeiden.
    Und wenn ich die Func um die Hotkeys auszustellen benutze, deaktiviert er nur einen.
    Könnt Ihr mir evtl auf die Sprünge helfen?:)

    Gruß Danny


    Spoiler anzeigen
    [autoit]

    HotKeySet ("k", "kanal")
    HotKeySet ("s", "bogen")
    HotKeySet ("d", "verbinder")
    HotKeySet ("w", "rohr")
    HotKeySet ("q", "pause")
    HotKeySet ("!q", "start")

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

    Global $Paused

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

    Func kanal()
    HotKeySet("k")
    send ("!u")
    ;send ("r")
    ;send ("{right}")
    send ("k")
    send ("{ENTER}")
    HotKeySet ("k", "kanal")
    EndFunc

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

    Func bogen()
    send ("!u")
    send ("b")
    send ("b")
    send ("{ENTER}")
    EndFunc

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

    Func verbinder()
    send ("!u")
    send ("v")
    send ("v")
    send ("v")
    send ("{ENTER}")
    EndFunc

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

    Func rohr()
    send ("!u")
    send ("r")
    send ("r")
    send ("r")
    send ("r")
    send ("r")
    send ("{ENTER}")
    EndFunc

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

    Func pause()
    HotKeySet ("kanal")
    HotKeySet ("bogen")
    HotKeySet ("verbinder")
    HotKeySet ("rohr")
    EndFunc

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

    Func start()
    HotKeySet ("k", "kanal")
    HotKeySet ("s", "bogen")
    HotKeySet ("d", "verbinder")
    HotKeySet ("w", "rohr")
    EndFunc

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

    while 1
    sleep (100)
    WEnd

    [/autoit]
  • Hi, beim lesen deines Scriptes ist mir schon ein Fehler aufgefallen. Zudem habe ich das ganze ein wenig optimiert!

    Zeile 47-50 willst du die Hotkeys vermutlich freigeben?
    -> Die Hotkeys sind an die Tasten gebunden. Daher musst du die Tasten freigeben.
    -> Siehe mein Script Zeile 21-24.

    Die Hotkeys wurden zum erstellen und freigeben in eine eigene Funktion gelagert. Diese muss dann einfach 1x zu beginn aufgerufen werden. Dadurch wird das Script ein paar Zeilen kürzer.

    Zudem habe ich die Funktion start() entfernt und die Funktion pause() umgeschrieben. Das ist glaube ich selbst erklärend.

    Spoiler anzeigen
    [autoit]

    Global $bPause

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

    HotKeySet("q", "pause")
    HotKeySet("{ESC}", "ende")
    _HotKeys(1)

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

    While Sleep(1000)
    WEnd

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

    Func _HotKeys($bState = False)
    If $bState Then
    HotKeySet("k", "kanal")
    HotKeySet("s", "bogen")
    HotKeySet("d", "verbinder")
    HotKeySet("w", "rohr")
    Else
    HotKeySet("k")
    HotKeySet("s")
    HotKeySet("d")
    HotKeySet("w")
    EndIf
    EndFunc ;==>_HotKeys

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

    Func pause()
    If Not $bPause Then
    _HotKeys()
    Else
    _HotKeys(1)
    EndIf
    $bPause = Not $bPause
    EndFunc ;==>pause

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

    Func ende()
    Exit
    EndFunc

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

    Func kanal()
    HotKeySet("k")
    Send("!u")
    ;send ("r")
    ;send ("{right}")
    Send("k")
    Send("{ENTER}")
    HotKeySet("k", "kanal")
    EndFunc ;==>kanal

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

    Func bogen()
    Send("!u")
    Send("b")
    Send("b")
    Send("{ENTER}")
    EndFunc ;==>bogen

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

    Func verbinder()
    Send("!u")
    Send("v")
    Send("v")
    Send("v")
    Send("{ENTER}")
    EndFunc ;==>verbinder

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

    Func rohr()
    Send("!u")
    Send("r")
    Send("r")
    Send("r")
    Send("r")
    Send("r")
    Send("{ENTER}")
    EndFunc ;==>rohr

    [/autoit]

    Make-Grafik

  • Ich versteh es ja, wenn ab und zu mal ein Post übersehen wird, aber da nun einige Posts später scheinbar eine Lösung dabei herauskommt, die mehr als doppelt so lang ist wie meine mach ich jetzt einfach nochmal auf meinen Post da oben aufmerksam... :whistling:

    LG
    Christoph :)

  • Deine Antwort, Christoph54, ist leider zu kompliziert für mich Anfänger...
    Ich versteh schon nicht alles bei "Make-Grafik"...

    Trotzdem danke für alle die geholfen haben :)

    LG

    Stuuhl

  • Ah okey :D Dann erkläre ich dir einfach erst einmal, was mein Script eigentlich macht :)

    Sicherlich hast du verständnis Probleme bei den Funktionen:
    _HotKeys()
    pause()

    Spoiler anzeigen
    [autoit]

    Global $bPause ;~ Diese Variable (weil nichts zugewiesen wird) hat den Wert 0 oder '' oder False (Bool'sche Wert)
    ;~ Was daraus gelesen wird, ist von der zu verwendeten Funktion oder Gleichung abhängig!

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

    HotKeySet("q", "pause")
    HotKeySet("{ESC}", "ende")
    _HotKeys(1)

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

    While Sleep(1000)
    WEnd

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

    Func _HotKeys($bState = False) ;~ Funktion + Parameter | Siehe mein Tutorial: http://www.autoit.de/index.php?page=Thread&threadID=32467
    If $bState Then ;~ Ist $bState wahr (Hat einen Inhalt der nicht 0 oder False ist) dann den Code ausführen:
    HotKeySet("k", "kanal")
    HotKeySet("s", "bogen")
    HotKeySet("d", "verbinder")
    HotKeySet("w", "rohr")
    Else ;~ Ansonsten diesen Code ausführen:
    ;~ Hier werden die belegten Tasten wieder freigegeben!
    HotKeySet("k")
    HotKeySet("s")
    HotKeySet("d")
    HotKeySet("w")
    EndIf
    EndFunc ;==>_HotKeys

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

    Func pause() ;~ Funktion
    If Not $bPause Then ;~ Ist $bPause NICHT wahr (also False, 0 oder einen Leerstring '') dann den Code ausführen:
    _HotKeys() ;~ Alle Hotkeys werden freigegeben.
    Else ;~ Ansonsten diesen Code ausführen:
    _HotKeys(1) ;~ Alle freigegebenen Hotkeys werden wieder besetzt.
    EndIf
    $bPause = Not $bPause ;~ $bPause = Gegenteil von vorrigen Inhalt! (Aus True wird False und aus False wird True! - Immer bezogen auf Bool'sche Werte!)
    EndFunc ;==>pause

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

    Func ende()
    Exit
    EndFunc

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

    Func kanal()
    HotKeySet("k")
    Send("!u")
    ;send ("r")
    ;send ("{right}")
    Send("k")
    Send("{ENTER}")
    HotKeySet("k", "kanal")
    EndFunc ;==>kanal

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

    Func bogen()
    Send("!u")
    Send("b")
    Send("b")
    Send("{ENTER}")
    EndFunc ;==>bogen

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

    Func verbinder()
    Send("!u")
    Send("v")
    Send("v")
    Send("v")
    Send("{ENTER}")
    EndFunc ;==>verbinder

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

    Func rohr()
    Send("!u")
    Send("r")
    Send("r")
    Send("r")
    Send("r")
    Send("r")
    Send("{ENTER}")
    EndFunc ;==>rohr

    [/autoit]

    autoBert's Script überspringe ich, da es dich nur unnötig (als Anfänger) verwirrt :)

    Christoph54's Script

    Spoiler anzeigen
    [autoit]

    Global $bHotkeys, $aHotkeys[3][2] = [["{ESC}","_ESCBenutzt"],["1","_Eins"],["7","_Sieben"]] ;~ Verkürzte Schreibweise :)

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

    ;~ Hier wird einmal $bHotkeys ohne Inhalt definiert. Das bedeutet das diese False, 0 oder auch einen Leerstring '' beinhaltet.
    ;~ -> Dies ist abhängig von den Funktionen oder Gleichungen!

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

    ;~ Zudem wird ein Array (Das kannst du dir wie eine Tabelle vorstellen) definiert mit folgenden Inhalten:
    ;~ -> ACHTUNG! Arrays sind 0 basierend! 0, 1, 2, 3, usw...
    ;~ -> Siehe dazu BugFix's Tutorial: http://www.bug-fix.info/array_tut.htm

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

    ;~ $aHotkeys[0][0] = "{ESC}" $aHotkeys[0][1] = "_ESCBenutzt"
    ;~ $aHotkeys[1][0] = "1" $aHotkeys[1][1] = "_Eins"
    ;~ $aHotkeys[2][0] = "7" $aHotkeys[2][2] = "_Sieben"

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

    HotKeySet("{UP}","_ToogleHotkeys") ;~ Drückt man die Pfeiltaste (oben), so werden die Hotkeys ein/aus geschaltet!

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

    While Sleep(500)
    WEnd

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

    Func _ToogleHotkeys()
    Local $sKey = "" ;~ Keine Ahnung wieso diese Variable deklaiert wurde! Diese ist unnötig :o
    For $i = 0 To UBound($aHotkeys,1)-1 ;~ UBound fragt nach der größe (die oben in Zeile 1 festgelegte) des Array ab.
    ;~ Weil ein Array aber 0-Basierend ist, muss die Ausgabe um 1 verringert werden.
    ;~ Nun durchläuft die Schleife genau 0 bis 2 mal. Also insgesammt 3 mal.
    ;~ Die Anzahl der Schleifendurchläufe wird in der Variable $i gespeichert.
    If $bHotkeys Then ;~ Ist $bHotkeys = True dann Code ausführen:
    HotKeySet($aHotkeys[$i][0])
    ;~ Hier werden die Inhalte des Array ausgelesen.
    ;~ Je nach Schleifendruchlauf, ist dies unterschiedlich!
    ;~ Weil hier kein 2ter Parameter angegeben ist, werden die Hotkeys freigegeben.
    Else ;~ Ansonsten diesen Code ausführen:
    HotKeySet($aHotkeys[$i][0],$aHotkeys[$i][1])
    ;~ Und hier werden die Hotkeys gesetzt!
    EndIf
    Next
    $bHotkeys = Not $bHotkeys ;~ $bHotkeys = Gegenteil vom vorrigen Inhalt.
    EndFunc

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

    Func _EScBenutzt()
    MsgBox(0,"Dummy","_ESCBenutzt")
    EndFunc

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

    Func _Eins()
    MsgBox(0,"Dummy","_Eins")
    EndFunc

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

    Func _Sieben()
    MsgBox(0,"Dummy","_Sieben")
    EndFunc

    [/autoit]