1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. eliass123

Beiträge von eliass123

  • Wie ändere ich beim erneuten Aktivieren des Scripts seine Funktion, während es bereits läuft

    • eliass123
    • 9. Juni 2018 um 17:06
    Zitat von Bitnugger

    Hier mal eine kleine Demo aus meinem Code-Schnipsel-Archiv...

    Derzeit nutze ich diese Version des scripts

    C
    #Region    ;************ Includes ************
    #include <Misc.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    If _Singleton(@ScriptName, 1) Then
        ; zweites mal start
        ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f12}" )      ;start recording
        Send ("+{f4}")
         ; Juhu, ich bin allein...
        _Main()
    Else
        ;erstes mal start
        ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f12}" )      ;start recording
        HotKeySet("+{f3}", "_replay")
        Send ("+{f3}")
        AdlibRegister("_StopRecord", 1000*60*1)
         ; Es läuft bereits eine Instanz...  HÄ DAS IST DOCH VERTAUSCHT????????????????????????????????????????????????????????????????????????????????????????
        Local $hWnd = WinGetHandle(@ScriptName), $hCtrl = ControlGetHandle($hWnd, '', '[CLASS:Static; INSTANCE:1]')
        If IsHWnd($hCtrl) Then
            ControlSetText($hCtrl, '', '', 'Verpiss dich...')
            ControlClick($hCtrl, '', '') ; Klopf, klopf... etwas Zeit zum (Lesen des neuen Textes und) Beenden des Scriots geben,
            If Not WinWaitClose($hWnd, '', 5) Then ; 5 Sekunden...  damit es evtl. noch Daten speichern kann.
                WinClose($hWnd) ; Was, der will nicht spuren? Dann eben so...
            EndIf
        EndIf
    EndIf
    
    
    
    
    HotKeySet("+{f4}", "_ExtendTime")
    While 1
        Sleep(20)
    WEnd
    
    Func _StopRecord()
        ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f11}" )
        Exit
        WinWaitClose
     EndFunc
    
    Func _ExtendTime()
        $iTime = 1                              ;stop recording after 1 minutes
        AdlibRegister("_StopRecord", 1000*60*$iTime)
     EndFunc
    
    Func _replay()
    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f6}" )
    EndFunc
    Func _Exit()
       Exit
    EndFunc
    
    
    Func _Main()
        #Region - GUI Create
        Local $hGUI = GUICreate(@ScriptName)
        GUISetBkColor(0x280000)
        Local $idLabel_Singleton = GUICtrlCreateLabel('Mich gibt es nur 1x ;-)', 10, 10, 250)
        GUICtrlSetFont(-1, 14)
        GUICtrlSetColor(-1, 0xFF0000)
        GUISetState()
        #EndRegion
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()            ;switch ändert ereignis je nach case
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $idLabel_Singleton
                    Sleep(150)     ;     in diesem script muss der wert so niedrig bleiben
                    GUICtrlSetData($idLabel_Singleton, 'Ja, ich gehe ja schon...')
                    Sleep(150)
                    Exit
    ;~             Case
    ;~             Case
    ;~             Case
    ;~             Case Else
            EndSwitch
        WEnd
        #EndRegion
    EndFunc
    Alles anzeigen

    Das Problem gerade ist, dass, wenn ich das Script das 3. mal starte, während es bereits lief, nach der 1 minütigen Laufzeit eine Version des Scripts für immer bestehen bleiben wird und sich nicht schließt. https://i.imgur.com/1Eduya2.png

    Das bedeutet, sobald ich das Script wieder so nutzen wollte, denkt das neue script es wäre die 2. und nicht die 1. Instanz.

    In deinem Original Script war es nicht so und ich habe auch schon versucht, die Scripts anzugleichen oder die "Sleep(150)"s durch Adlibregister(funktion exit, 150) zu ersetzen

    findest du den fehler im code, warum sich das script bei der 3. ausführung nicht schließt?

    Dateien

    bitnuggers script.au3 1,67 kB – 360 Downloads ultimativer button 1 und 2 nicht vertauscht.au3 2,97 kB – 392 Downloads
  • Wie ändere ich beim erneuten Aktivieren des Scripts seine Funktion, während es bereits läuft

    • eliass123
    • 29. Mai 2018 um 20:33
    Zitat von Bitnugger

    Hier mal eine kleine Demo aus meinem Code-Schnipsel-Archiv...

    AutoIt
    ;-- TIME_STAMP   2018-05-28 18:26:57   v 0.1
    
    #Region    ;************ Includes ************
    #include <Misc.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    If _Singleton(@ScriptName, 1) Then
        ; Juhu, ich bin allein...
        _Main()
    Else
        ; Es läuft bereits eine Instanz...
        Local $hWnd = WinGetHandle(@ScriptName), $hCtrl = ControlGetHandle($hWnd, '', '[CLASS:Static; INSTANCE:1]')
        If IsHWnd($hCtrl) Then
            ControlSetText($hCtrl, '', '', 'Verpiss dich...')
            ControlClick($hCtrl, '', '') ; Klopf, klopf... etwas Zeit zum (Lesen des neuen Textes und) Beenden des Scriots geben,
            If Not WinWaitClose($hWnd, '', 5) Then ; 5 Sekunden...  damit es evtl. noch Daten speichern kann.
                WinClose($hWnd) ; Was, der will nicht spuren? Dann eben so...
            EndIf
        EndIf
    EndIf
    
    Func _Main()
        #Region - GUI Create
        Local $hGUI = GUICreate(@ScriptName)
        GUISetBkColor(0x280000)
        Local $idLabel_Singleton = GUICtrlCreateLabel('Mich gibt es nur 1x ;-)', 10, 10, 250)
        GUICtrlSetFont(-1, 14)
        GUICtrlSetColor(-1, 0xFF0000)
        GUISetState()
        #EndRegion
    
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $idLabel_Singleton
                    Sleep(1500)
                    GUICtrlSetData($idLabel_Singleton, 'Ja, ich gehe ja schon...')
                    Sleep(1500)
                    Exit
    ;~             Case
    ;~             Case
    ;~             Case
    ;~             Case Else
            EndSwitch
        WEnd
        #EndRegion
    EndFunc
    Alles anzeigen

    danke, das war sehr hilfreich. konnte mein script problemlos darin integrieren und hab das fenster versteckt mit

    Code
     GUISetState(@SW_HIDE)
  • Wie ändere ich beim erneuten Aktivieren des Scripts seine Funktion, während es bereits läuft

    • eliass123
    • 28. Mai 2018 um 15:57
    Zitat von XovoxKingdom

    Hallo,

    du hast schon ganz recht, dass Singleton das richtige Muster ist.

    Und mit genau dem Schlagwort kannst du doch beim nächsten Mal auch gerne die Hilfedatei, die auch in Deutsch erhältlich ist, durchsuchen. Diese ist sehr nützlich und enthält zudem Codebeispiele.

    Hier ein nur minimal angepasstes Codebeispiel, das der Hilfedatei entnommen wurde:

    AutoIt
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    
    If _Singleton("test", 1) = 0 Then
        ; Hier muss der Code rein, wenn es vorher bereits aufgerufen wurde und die erste Instanz noch läuft
        MsgBox($MB_SYSTEMMODAL, "Warning", "An occurrence of test is already running")
    Else
        ;Hier muss der Code des ersten Programmstarts rein
        MsgBox($MB_SYSTEMMODAL, "OK", "the first occurrence of test is running")
    EndIf
    C
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    If _Singleton("test", 1) = 0 Then    ; zweites mal start    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f12}" )      ;start recording    Send ("+{f4}")
    Else    ;erstes mal start    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f12}" )      ;start recording    HotKeySet("+{f3}", "_replay")    Send ("+{f3}")    AdlibRegister("_StopRecord", 1000*60*1) EndIf
    
    
    
    
    
    HotKeySet("+{f4}", "_ExtendTime")
    While 1    Sleep(20)
    WEnd
    
    Func _StopRecord()    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f11}" )    Exit EndFunc
    
    Func _ExtendTime()    $iTime = 1                              ;stop recording after 15 minutes    AdlibRegister("_StopRecord", 1000*60*$iTime) EndFunc
    
    Func _replay()
    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f6}" )
    EndFunc
    Alles anzeigen

    Habe es hingekriegt, singleton zu integrieren aber...

    ich starte das script 2 mal und beide versionen laufen. Sie führen alle Operationen richtig aus, bis auf die tatsache, dass die zuerst ausgeführte version des scripts sich nicht von selbst schließt, obwohl es bei AdlibRegister("_StopRecord", 1000*60*1) einen Exit aktivieren müsste. Als ich davor ohne Singleton gescriptet hatte, funktionierte es auch richtig und wenn ich nur eine version des scripts zur selben zeit aktiv habe, schließt es sich auch korrekt. (datei im anhang)

    Außerdem kommt manchmal willkürlich die Operation

    Code
    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f11}" )

    nicht in meinem programm an. Brauche ich vielleicht sowas wie größere Pausezeiten zwischen den Aktionen? (Muss ich dazu bei

    Code
    While 1    Sleep(20)
    WEnd

    die Sleepzeit erhöhen? (hatte mir wer anders vorgeschrieben, deswegen bin ich mir unsicher)

    Das ist die Version ohne Singleton, die korrekt Exit getriggert hat:

    Code
    AdlibRegister("_StopRecord", 1000*60*15)
    HotKeySet("+{f6}", "_ExtendTime")                                                                                                                      
    
    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f12}" )      ;start recording
    
    While 1
        Sleep(10)
    WEnd
    
    Func _StopRecord()
        ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f11}" )
        MsgBox(0, "", "Recording Ended")
        Exit
    EndFunc
    
    Func _ExtendTime()
        $iTime = 15                             ;stop recording after 15 minutes
        AdlibRegister("_StopRecord", 1000*60*$iTime)  ;x1000x60 because from miliseconds to minutes
     EndFunc
    Alles anzeigen

    Dateien

    funktioniere.au3 1,2 kB – 395 Downloads
  • Wie ändere ich beim erneuten Aktivieren des Scripts seine Funktion, während es bereits läuft

    • eliass123
    • 27. Mai 2018 um 19:28

    Hi,

    ich habe ein Script, das ein paar Funktionen ausführen soll, aber eine davon soll nicht ausgeführt werden, wenn das Skript nochmal aktiviert wird, während es bereits läuft.

    Ich hatte irgendwo gelesen, dass man es mit Singleton machen soll, aber, weil ich ein Anfänger bin und Informatik allgemein kompliziert finde, weiß ich nicht, wie ich es nutzen sollte.

    Ich möchte zur Aktivierung des Scripts und zur Aktivierung der Zusatzfunktion denselben Tastaturbutton benutzen. Bisher kriege ich es nicht hin mit meinem Wissen

    Code
    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f12}" )      ;start recording
    
    Send ("+{f4}") ; I need this for the script to trigger _ExtendTime when I press it the second time.
    
    HotKeySet("+{f3}", "_replay") ;
    
    Send ("+{f3}")                ;this is what I only want the first time. It saves the replay.
    
    HotKeySet("+{f4}", "_ExtendTime")
    AdlibRegister("_StopRecord", 1000*60*15)
    ;hierhin exit?
    
    While 1
        Sleep(20)
    WEnd
    
    Func _StopRecord()
        ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f11}" )
        Exit
     EndFunc
    
    Func _ExtendTime()
        $iTime = 1                              ;stop recording after 15 minutes
        AdlibRegister("_StopRecord", 1000*60*$iTime)
    
     EndFunc
    
    Func _replay()
    ControlSend ( "OBS 21.1.0 (64bit, windows) - Profil: Unbenannt - Szenen: Unbenannt", "", "[CLASS:Qt5QWindowIcon; INSTANCE:1]", "+{f6}" )
    EndFunc
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™