Script proplem? vllt datei pfad eingeben?

  • hey leute das ist mein script

    Spoiler anzeigen

    obentrüber ist noch die box gescriptet etc also bevor is start drücke geht ende und [x] pause kann ich so nicht testen aber sobald ich start drücke gehen pause,ende [x] nichtmehr... welches script fehlt mir da?</ButtonConstants>

    3 Mal editiert, zuletzt von Repins94 (26. September 2009 um 23:11)

  • Hallo Repins94,

    poste doch bitte das komplette Skript, weil so kann man es nicht testen,

    mfg (Auto)Bert


    da bitte und was ich auch kimich finde ich habe halt en icon angezeigt bei einstellungen oder eigenchaften aber da ist immernoch das A³ logo -.-

  • Hi,
    habe dir mal das Script bissl umgebaut und Kommentare eingefügt, damit du verstehst was dort los ist^^

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MpBot by repins94", 180, 291, 297, 132)
    GUISetCursor(0)
    GUISetBkColor(0x808080)
    $Label1 = GUICtrlCreateLabel("Scripted by Repins94", 16, 256, 151, 25)
    GUICtrlSetFont(-1, 11, 800, 4, "Comic Sans MS")
    GUICtrlSetColor(-1, 0x800000)
    $Button1 = GUICtrlCreateButton("Start", 24, 24, 137, 41, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Pause", 24, 88, 137, 41, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Ende", 24, 152, 137, 41, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

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

    HotKeySet("{F1}", "_Start")
    HotKeySet("{F3}", "_Ende")
    HotKeySet("{Pause}", "_Pause")

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

    Global $start = 0 ;Button wurde noch nicht gedrückt, global heisst, die Variable gilt auch innerhalb der Funktionen!
    Global $pause = 0 ; Pausebutton wurde noch nicht gedrückt
    Global $t ;startzeit des timers merken

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Start() ; Startfunktion aufrufen, Variable $start wird auf 1 gesetzt
    Case $Button2
    _pause() ; Pausefunktion aufrufen, Variable $start wird auf 0 gesetzt
    Case $Button3
    _Ende()
    EndSwitch

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

    If $start = 1 Then ;wenn der startbutton gedrückt wurde und...
    If TimerDiff($t) > 500 Then ;...wenn mehr wie eine halbe sekunde seit start des timers vergangen ist dann
    Send("{2}") ;die 2 senden
    ToolTip("send {2} wird ausgeführt...")
    $t = TimerInit() ;startzeit des timers merken
    EndIf
    Else ;wenn start nicht gedrückt wurde, dann ist pause^^
    ToolTip("Zur Zeit ist Pause!!! Start drücken!")
    EndIf

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

    WEnd

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

    Func _Start()
    $start = 1
    $t = TimerInit() ;startzeit des timers merken
    ToolTip("Start wurde gedrückt")
    EndFunc ;==>_Start

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

    Func _Ende()
    MsgBox(0, 0, "Ende wurde gedrückt, in 5 Sekunden wird das Programm geschlossen!", 5)
    Exit
    EndFunc ;==>_Ende

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

    Func _pause()
    ToolTip("Pause wurde gedrückt..." & @CRLF)
    Sleep(1000)
    $start = 0
    EndFunc ;==>_pause

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

    Func Close()
    Exit
    EndFunc ;==>Close

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

    Anmerkungen von mir dazu:
    - Das Sleep() hält dein Programm für diese Zeit an, d.h. alle Maus-Klicks auf die Buttons werden in dieser Zeit nicht registriert!
    Im Prinzip ist es Geschmacksache, aber ich würde überall, wo du bestimmte Zeit "warten" musst, den Eventmodus verwenden, damit du nicht diese Klimmzüge über den Timer machen musst.
    Dem Eventmodus ist es nämlich egal, ob du in deinem Programm mit einem Sleep(23451223) einige Minuten die Programmausführung angehalten hast, er "unterbricht" gewissermassen das Sleep() und macht sofort weiter...
    - Den Call() -Befehl brauchst du nicht unbedingt, du kannst die Funktionen auch so wie in meinem Beispiel aufrufen
    - Alle Deklarationen von Variablen und Hotkeyset() und GuiOnEvent() gehören IMMER VOR DIE ENDLOSSCHLEIFE! Stehen sie dahinter, werden sie niemals abgearbeitet...
    - Der Übersicht halber gehören die Funktionen alle HINTER DIE SCHLEIFE!
    - Wenn du mit Scite arbeitest, drück ab und zu mal (bei Extras) auf TIDY AUTOIT SOURCE oder Ctrl+T , dann wird der Code automatisch "schön" gesetzt^^


    ansonsten viel Spass mit AutoIt
    ciao
    Andy

    */edit*/ Man könnte die Pausefunktion komplett wegfallenlassen....mach das Script kürzer und ändere es so, daß man die Pause mit einem 2. Tastendruck auf die Pausetaste wieder beendet^^

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (27. September 2009 um 01:53)

    • Offizieller Beitrag

    Andy

    Zitat

    Dem Eventmodus ist es nämlich egal, ob du in deinem Programm mit einem Sleep(23451223) einige Minuten die Programmausführung angehalten hast, er "unterbricht" gewissermassen das Sleep() und macht sofort weiter...

    Da muß ich dir leider wiedersprechen, das Scipt macht bei einem Sleep gar nichts. Es reagiert auch nicht auf einen Event währen der Sleepzeit. Der Event wird erst nach dem Sleep ausgeführt.
    Hier zum Probieren:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 203, 204, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Button1 = GUICtrlCreateButton("Start", 72, 56, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button3 = GUICtrlCreateButton("Ende", 72, 128, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Form1Close")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func Button1Click()
    ToolTip("Funktion läuft ", 100, 100)
    Sleep(20000)
    ToolTip("Funktion beendet ", 100, 100)
    EndFunc ;==>Button1Click

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

    Func Form1Close()
    Exit
    EndFunc ;==>Form1Close

    [/autoit]
  • Raupi ,
    Natürlich hast du Recht! Seltsam, was man spät Nachts obwohl eigentlich hellwach, doch für Träume hat :thumbup:
    cio
    Andy

    • Offizieller Beitrag

    Nein, Andy hat schon recht. Ein Sleep wird in der Tat vom OnEventMode unterbrochen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 203, 204, 192, 124)
    GUISetOnEvent($GUI_EVENT_CLOSE, "End")
    $Button1 = GUICtrlCreateButton("Start", 72, 56, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button3 = GUICtrlCreateButton("Ende", 72, 128, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Form1Close")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(200000) ; dieser Sleepwert ist gemeint
    WEnd

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

    Func Button1Click()
    ToolTip("Funktion läuft ", 100, 100)
    EndFunc ;==>Button1Click

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

    Func Form1Close()
    ToolTip("Funktion beendet ", 100, 100)
    EndFunc ;==>Form1Close

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

    Func End()
    Exit
    EndFunc

    [/autoit]

    Raupi, was Du meinst ist, dass eine per Event aufgerufene Funktion nicht von einem weiteren Event unterbrochen wird. Man muss erst diese Funktion wieder beenden (Return), um eine andere Funktion per Event aufrufen zu können.

    • Offizieller Beitrag

    Oscar , genau das habe ich gemeint. Die meisten Leute werden den Hauptteil des Scriptes nicht in die Hauptschleife packen. Dann kann man gleich im MessageLoopMode arbeiten.Ich finde es zumeist sogar Sinnvoll, das die Events nicht just in Time abgearbeitet werden. Das führt meist zu Problemen.

    • Offizieller Beitrag

    Naja, man kann sein Programm auch so schreiben, dass es immer wieder schnell die per Event aufgerufenen Funktionen wieder verlässt.
    Wo das nicht möglich ist, kann man einen kleinen Trick (mit AdlibEnable) verwenden, um die GUI bedienbar zu halten:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 203, 204, 100, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "End")
    $Button1 = GUICtrlCreateButton("Start", 72, 56, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button3 = GUICtrlCreateButton("Ende", 72, 128, 75, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Form1Close")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $stop = False
    While 1
    Sleep(200000)
    WEnd

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

    Func Button1Click()
    $stop = False
    ToolTip("Funktion läuft ", 100, 100)
    AdlibEnable('SleepFunc', 1)
    EndFunc ;==>Button1Click

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

    Func Form1Close()
    $stop = True
    EndFunc ;==>Form1Close

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

    Func SleepFunc()
    Local $count
    AdlibDisable()
    While Not $stop
    $count += 1
    Sleep(500)
    ToolTip($count, 100, 100)
    WEnd
    ToolTip("Funktion beendet ", 100, 100)
    EndFunc ;==>SleepFunc

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

    Func End()
    Exit
    EndFunc ;==>End

    [/autoit]
  • Ich finde dies Diskussion sehr interessant, denn bei meiner Art zu Scripten liegt es "am Anfang" noch garnicht fest, ob im OnEvent- oder Msgmode gearbeitet wird. Meist fange ich Quick´n´Dirty mit dem MsgMode an und wenn dann die Abfragen eine bestimmte Größe (die ich nicht näher spezifizieren kann, "Gefühlssache"^^ ) überschreiten, dann wechsele ich auf den Eventmodus.

    Zitat

    Ich finde es zumeist sogar Sinnvoll, das die Events nicht just in Time abgearbeitet werden. Das führt meist zu Problemen.

    SEHR gutes Argument! Der DAU-Faktor muss beim OnEvent natürlich weitaus mehr beachtet werden!

    • Offizieller Beitrag

    Oscar gutes Beispiel ;)

    Wenn die Gui aber immer reagiert hat das auch erhebliche Nachteile.
    Beispiel: In meinem Taskman werden periodisch die sichtbaren Fenster abgeglichen. Wenn ich jetzt eine andere Funktion wärend der Berechnung aufrufen kann, dann werden die Daten eventuell nicht mehr richtig gesetzt. Ergebnis: Autoit verabschiedet sich oder baut nur noch Mist. Da finde ich es besser wenn die Evebt´s erst nach beenden der Funktion aufgerufen werden. Aber im großen und ganzen muß jeder selbst entscheiden, wie er es handhaben will (kann). Ich wechsel auch teilweise innerhalb meiner Scripte zwichen ONEvent und MessageLoop Mode. Das habe ich übrigens von dir Oscar und BugFix 8)

    • Offizieller Beitrag

    Für gewöhnlich benutze ich beim programmieren eigentlich den OnEventMode, aber wenn ich einzelne Funktionen (mit GUI) erstelle, die unabhängig vom Hauptprogramm eingesetzt werden sollen, dann nehme ich den MessageLoopMode, weil man dann keine globalen Variablen braucht. Das geht ganz gut, wenn man am Anfang in den MessageLoopMode umschaltet und am Ende der Funktion den Ursprungsmodus wiederherstellt.

    • Offizieller Beitrag

    Ganau dafür verwende ich auch das Umschalten. Wenn man z.B. eine EinstellungsGui oder dergleichen in sein Script einbaut, ist der MessageLoopMode interessant. Finde es absolut unübersichtlich, für die GUI zig Funktionen zu benutzen. Das dient bestimmt nicht der Übersichtlichkeit des Scriptes. Generell ziehe ich den OnEventMode aber vor.

  • eine frage könnte man das auch so schrieben das er die tasten zwa drückt aber man es nicht sieht? also ja <.> das man zwa die auswirkung hatt aber nicht die zahlen sieht

    • Offizieller Beitrag

    eine frage könnte man das auch so schrieben das er die tasten zwa drückt aber man es nicht sieht? also ja <.> das man zwa die auswirkung hatt aber nicht die zahlen sieht

    Ähm, ich versteh kein Wort. Was ist das für eine Sprache? Geht das auch so, das man es versteht?

  • Ähm, ich versteh kein Wort. Was ist das für eine Sprache? Geht das auch so, das man es versteht?


    so long...
    Also, wäre es eventuell möglich, dass man das script einem fenster zuortnen kann aber dort nicht sieht was es macht also das einfach das script "unsichtbar" arbeitet

  • Hallo Repins94,

    so long...
    Also, wäre es eventuell möglich, dass man das script einem fenster zuortnen kann aber dort nicht sieht was es macht also das einfach das script "unsichtbar" arbeitet


    was machst du denn, dass der Anwender nicht sehen darf (BOT? dann lies dir doch bitte mal die Forenregeln durch,

    PS. Es ist auch unhöflich durch nachträgliches Editieren des Eröffnungsposts, ohne dies kenntlich zu machen (z.B Edit Zeile 1 - 38 eingefügt) den Sinn nachfolgender Beiträge zu verzerren:

    Spoiler anzeigen
    [autoit]


    [/align]

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

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=beta
    #AutoIt3Wrapper_icon=1253994755_bottom.ico
    #AutoIt3Wrapper_outfile=Mp Potter.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    AutoIt3Wrapper_icon=c:\\Benutzer\User\Desktop\logo2.ico

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MpBot by repins94", 180, 291, 297, 132)
    GUISetCursor (0)
    GUISetBkColor(0x808080)
    $Label1 = GUICtrlCreateLabel("Scripted by Repins94", 16, 256, 151, 25)
    GUICtrlSetFont(-1, 11, 800, 4, "Comic Sans MS")
    GUICtrlSetColor(-1, 0x800000)
    $Button1 = GUICtrlCreateButton("Start", 24, 24, 137, 41, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Pause", 24, 88, 137, 41, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Ende", 24, 152, 137, 41, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

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

    Func Close()
    Exit
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    Call ("Start")

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

    Case $Button2
    Call ("_sleep")

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

    Case $Button3
    Call ("Ende")

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

    EndSwitch
    wend

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

    HotKeySet ( "{F1}" , "Start" )
    HotKeySet ( "{F3}" , "Ende" )
    HotKeySet("{Pause}", "_sleep")

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

    Func Start ()
    While 1
    Sleep (500)
    Send ( "{2}")

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

    WEnd
    EndFunc

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

    Func Ende ()
    Exit
    EndFunc

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

    Func _sleep()
    If $sleep = 1 Then
    $sleep = 0
    Else
    $sleep = 1
    EndIf
    EndFunc

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

    While 1
    sleep (1)
    WEnd

    [/autoit]

    das Ursprünglich eingestellet Skript hat erst in der Zeile 39 angefangen,
    mfg (Auto)Bert