Proggramie Hilfe (4 Felder)

  • Hallo, ich bin Leider sehr unerfahren was das Programm autoit angeht und bitte euch mir zu helfen.

    Also ich möchte ein programm schreiben das wie folgt arbeitet.

    Ich habe meinen Bildschirm in 4 Teile getailt.
    Rechts/oben läuft Word
    links/oben lüft Exel
    rechts/unten Powerponit
    und links/unten ein 2tes word.

    durch einen klick auf den bildschirm soll ein bestimmtes Programm aktiviert werden.

    also in den Pixeln (100/100) -> (500/400) hält sich word 1 auf
    in (750,100) -> (1100/400) Exel
    in (100,600) -> (500,900) Poerpoinz
    in (750,600) -> (1100,900) Word 2

    Nun soll es wie folgt ablaufen.

    Ich starte das script und es erscheint ein fenster in dem ich den interfvall eingeben kann in dem sich die Aktion wiederholt. Also brauche ich 4 Intervalle.

    Z.B. feld1 (word1) alle 60 sek
    feld 2 (exels) alle 120sek
    uws

    und dann sollte es wiefolgt ablaufen

    jede minute klickt der cuorser in den (word1 ) bereich auf en Zufallspixel. schreibt en Wort z.B. Haus
    alle 2 minuten klickt er in en zufallspixel in Feld 2 und macht dort en wort

    und dass soller er mit allen 4 feldern so machen

    Ich möchte nur am Anfang eigeben welches Feld er in welchem Intervall bearbeitet.

    was noch wichtig wäre. Er sollte nicht so genau arbeiten also nicht wirklich genau alle 60 sekunden Feld 1 bearbeiten ich würde gerne eine tolleranz eingeben von ca 10 Sekunden.

    Das programm kann als auch schon nach 50sek oder geg 70sek das programm aktivieren (durch Zufall) aber Durchschnitt sollte bei 60sek liegen.

    Ok ich hoffe ihr habt verstanden was ich meine. Falls nicht fragt doch einfach nach:-)

    Freue mich wen ihr mir helfen könnt

    Gruß

    Flubber

    • Offizieller Beitrag

    Eine Bitte vorab - vor dem Posten nochmals durchlesen und die groben Schreibfehler rauskicken. Dann läßt es sich viel besser verstehen. ;)
    Also ich weiß nicht so richtig, was du eigentlich vorhast. Willst du nur zugucken, wie in bestimmten Intervallen irgendwas in deine Programme eingefügt wird? Welchen Sinn hat das?
    Du brauchst für das, was du beschrieben hast, nirgendwo hinklicken. Das geht auch bei minimierten Fenstern.
    Aber solange ich den Sinn nicht verstehe, kann ich dir keine konkreten Antworten geben.

  • Hallo,

    Jop tut mir sehr Leid das ich meinen Post nicht nochmal durchlesen konnte. Ich war leider sehr in Eile.

    "Willst du nur zugucken, wie in bestimmten Intervallen irgendwas in deine Programme eingefügt wird?"

    Genau das und dazu ist es sogar immer das gleiche ;-).

    Ich möchte aber dieses Programm wo anderst drauf anwenden. Musste es aber so komisch erklären, da Ihr mit der andern Erklärung leider noch sehr viel weniger anfangen könnt.

    Also den Sinn dahinter einfach mal nicht verstehen ok ?

    Gruß

    Flubber

  • Naja ich wollte es euch so einfach machen wie möglich.

    Hat ja leider nicht geklappt. Da einige Vermuten das ich 4 fach poker spiele und immer die gleichen züge machen werde ???

    Also ich erkläre es für die Mistrauischen

    Natürlich läuft da kein Word;exel etc. sonder ein programm namens latex (sagt sicher keinem was)

    Damit kann man chemische reaktionen nachstellen und Molekühle zeichenen.

    Ich möchte eine koploxe redoxreaktion in 4schritten ablaufen lassen. In der in unteschiedlichen Zeitpunkten molekühle miteinander reagieren. Jeder unterreaktin läuft in einem bestimmten Intervall ab.

    Mit so nem kleinen programm könnte man sehr anschaulich zeigen welcher stoff zuviel anfällt. Und wie es weiter verarbeitet wird.

    Also hoffe ich mal das sich dein Misstrauen gelegt hat aber vieleicht kannst du mir noch was verraten was ist den

    p.s. oder Silkroad auch sehr gerne
    p.p.s oder WoW
    p.p.p.s oder...

    Gruß

    Flubber

  • Ich bin ja eigendlich ein sehr geduldiger Mensch.

    Aber leider drängt es in diesem Fall. ich bitte euch mir zu helfen.

    Sonst muss ich noch nach einer anderen Alternative umschauen.

    Gruß

    Flubber

  • Hi,
    also es ist sehr schwer aus deinem ersten Post alle nötigen Informationen herauszusuchen. Abgesehen davon gehts es ja auch darum, dass du selber was leistest :).
    Müssen die Fenster unbedingt mit einem Klick aktiviert werden?

    Schreib einfach mal was du gerne haben möchtest, aber kurz und knapp in verständlicher Abfolge.

    :)

  • Du kannst es ja vielleicht auch schon mal selber versuchen oder deine bisherigen Versuche hier posten. Wir werden schießlich nicht das ganze Skript für dich schreiben.

    Aber für den Anfang kannst du dir ja z.B. mal die Befehle: MouseMove und Sleep angucken ;) .

    EDIT: Da war wohl mal wieder jemand schneller :D

  • So ich hab mich mal mit nem Bekannt hingesetzt und wir haben es mal versucht.

    Leider kam dabei irgendwas raus nur nicht das gewünschte Ergebins.

    Zumindest kommt immer diese Fehlermeldung


    >"C:\Programme\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Projekt.au3"
    C:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\Projekt.au3 (35) : ==> Variable used without being declared.:
    Global $1Min = GUICtrlRead($bMin_control)
    Global $1Min = GUICtrlRead(^ ERROR
    >Exit code: 1 Time: 11.486

    Das Skript sie bis jetzt so aus

    #include <GuiConstants.au3>
    Opt("TrayIconDebug",1)

    HotKeySet("{PGUP}","_start")
    HotKeySet("{Pause}","_break")
    HotKeySet("{PGDN}","_exit")

    $break = 0
    $gui_handle = GUICreate("Wordgame",280,200,-1,-1)

    $1Min_control = GUICtrlCreateInput("Min-Wert 1:",30,35,100,25)
    $1Max_control = GUICtrlCreateInput("Max-Wert 1:",155,35,100,25)
    $2Min_control = GUICtrlCreateInput("Min-Wert 2:",30,65,100,25)
    $2Max_control = GUICtrlCreateInput("Max-Wert 2:",155,65,100,25)
    $3Min_control = GUICtrlCreateInput("Min-Wert 3:",30,95,100,25)
    $3Max_control = GUICtrlCreateInput("Max-Wert 3:",155,95,100,25)
    $4Min_control = GUICtrlCreateInput("Min-Wert 4:",30,125,100,25)
    $4Max_control = GUICtrlCreateInput("Max-Wert 4:",155,125,100,25)
    $start = GUICtrlCreateButton("Start",115,160,50,25)
    GUISetState()

    While 1
    $msg = GuiGetmsg()
    Switch $msg
    Case $start
    WinActivate("WordPad")
    _guiread()
    GUISetState(@SW_HIDE)
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    Func _guiread()
    Global $1Min = GUICtrlRead($bMin_control)
    Global $1Max = GUICtrlRead($bMax_control)
    Global $2Min = GUICtrlRead($cMin_control)
    Global $2Max = GUICtrlRead($cMax_control)
    Global $3Min = GUICtrlRead($dMin_control)
    Global $3Max = GUICtrlRead($dMax_control)
    Global $4Min = GUICtrlRead($eMin_control)
    Global $4Max = GUICtrlRead($eMax_control)
    Global $1 = Random($1Min,$1Max,1)
    Global $2 = Random($2Min,$2Max,1)
    Global $3 = Random($3Min,$3Max,1)
    Global $4 = Random($4Min,$4Max,1)
    EndFunc

    Func _start()
    While 1
    sleep(1000)
    $a -= 1
    $b -= 1
    $c -= 1
    $d -= 1
    $e -= 1

    If $a = 0 Then _a()
    If $b = 0 Then _b()
    If $c = 0 Then _c()
    If $d = 0 Then _d()
    If $e = 0 Then _e()
    WEnd
    EndFunc


    Func _1()
    Send("5")
    Global $b = Random($bMin,$bMax,1)
    EndFunc

    Func _2()
    Send("6")
    Global $c = Random($cMin,$cMax,1)
    EndFunc

    Func _3()
    MouseClick("left", Random(114, 179)
    Send("7")
    Global $d = Random($dMin,$dMax,1)
    EndFunc

    Func _4()
    Send("8")
    Global $e = Random($eMin,$eMax,1)
    EndFunc

    Func _break()
    Switch $break
    Case 0
    $break = 1
    Case 1
    $break = 0
    EndSwitch
    While $break = 1
    sleep(300)
    WEnd
    EndFunc

    Func _exit()
    Exit
    EndFunc


    Bei funk 1-4 kann ich die tasten kombinatoin festlegen. das sollte eigendlich folgendes sein.

    -Mausklick in einem Zufallsfeld Pixelgrenzen 100/100 300/300
    -Enter drücken
    -Pfeiltaste nach oben drücken
    -Enter drücken

    Hab ich aber absolut nicht hinbekommen, konnte es auch nie überprüfen da wordpad nie gestartet ist. Falls es eine andere Möglichkeit gibt die felder zu aktivieren als kann ich auch diese verwenden.

    @ anno was brauchst du den noch für Infos.

    Ich hoffe auf schnelle Hilde den die Zeit drängt

  • Hi,
    also, dass das nicht Funktioniert is irgendwie klar.

    [autoit]

    Global $1Min = GUICtrlRead($bMin_control)

    [/autoit]

    Was soll er denn da bitteschön auslesen? Es ist vorher gar kein Label erstellt worden, dass den Namen hat.

    [autoit]

    If $a = 0 Then _a()

    [/autoit]

    Du rufst hier die Funktion a() auf, aber die gibt es gar nicht.

    Und dann sind noch so einige Fehler drin.

    Immerhin hast du dich bemüht was zu machen.
    Zu den Infos, ich weis überhaupt nicht was du vorhast.
    Einfach mal kurz und knapp erklären was gemacht werden soll, in pseudo Code, also ohne das jetzt direkt zu Programmieren.

    Oder einfach kurz und knapp aber verständlich erklären was du willst, ich kapiers nicht.

  • Ok ich geb mein bestes.

    An meinem Bildschirm habe ich 4 Fenster offen. neben bzw. unter einander.

    Nennen wirs sie Fenster 1. Fenster2, Fenster 3, Fenster4
    In jedem Fenster läuft ein Programm.

    Nun soll in jedem Programm eine Aktion durchgeführt werden. Um genau zu sein sind es 3 Testen die gedrückt werden sollen.

    1. Enter
    2. Pfeil nach oben
    3. Enter

    und dieser Vorgang immer wieder widerholt.

    Das ist die Basis. Jetzt kommt das mit der Zeit nach der die Aktion wiederholt werden soll. die ich jedesmal wen ich das Skript starte neu festlegen möchte.

    Version 1

    z.B. das ich min und max Werte festlege

    Fenster 1 Min: 100sek Max:120sek

    Nun sollte Fenster 1 aktiviert werden, die 3 Tasten gedrückt und der vorgang dann nach 100 sek- 120sek wiederholt werden. (Dieser Wert soll durch Zufall ermittelt werden)
    und das soll immer passieren bis das Skript beendet wird.

    Genau das gleiche gilt für die andern Fenster. Nur jedes soll seinen individuellen "Zeit-Wert" haben


    Version 2

    Es ist auch möglich das ich keien Min: Max: angeben mach. Sondern einen Durschschnitte der nach oben und unten 10 sek toleranz hat.

    Also Fenster 1 alle 100sek (als der vorgang(3 tasten) kann sich auch schon nach 90sek wieder holen oder erst nach 110sek wegen der toleranz
    Fenster 2 alle 60sek
    Fenster 3 alle 90sek
    Fenster 4 alle 70 sek

    Das ganze würde ich gerne mit den Funktionen Start, Pause, beenden steuern können. Da ich ja ers die fenster öffnen muss bevor das Skript startet.

    Gruß

    Flubber

  • Hi,
    also, hier mal eine vorab Version zum Testen :P.


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $Input[9], $random[4], $time[4], $counter = 0, $titles[4] = ["Titel1", "Titel2", "Titel3", "Titel4"]

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

    $GUI = GUICreate("Klicker :D", 234, 185, 477, 526)
    $ButtonStart = GUICtrlCreateButton("Start", 8, 128, 219, 25, 0)
    $ButtonStop = GUICtrlCreateButton("Stop", 8, 152, 219, 25, 0)
    $Label1 = GUICtrlCreateLabel("Fenster 1", 8, 36, 48, 17)
    $Label2 = GUICtrlCreateLabel("Fenster 2", 8, 60, 48, 17)
    $Label3 = GUICtrlCreateLabel("Fenster 3", 8, 83, 48, 17)
    $Label4 = GUICtrlCreateLabel("Fenster 4", 8, 108, 48, 17)
    $Label5 = GUICtrlCreateLabel("Minimum", 77, 8, 45, 17)
    $Label6 = GUICtrlCreateLabel("Maximum", 163, 8, 48, 17)
    $Input[1] = GUICtrlCreateInput("", 64, 32, 73, 21)
    $Input[2] = GUICtrlCreateInput("", 152, 32, 73, 21)
    $Input[3] = GUICtrlCreateInput("", 64, 56, 73, 21)
    $Input[4] = GUICtrlCreateInput("", 152, 56, 73, 21)
    $Input[5] = GUICtrlCreateInput("", 64, 80, 73, 21)
    $Input[6] = GUICtrlCreateInput("", 152, 80, 73, 21)
    $Input[7] = GUICtrlCreateInput("", 64, 104, 73, 21)
    $Input[8] = GUICtrlCreateInput("", 152, 104, 73, 21)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonStart
    GUICtrlSetState($ButtonStart, $GUI_DISABLE)
    For $i = 1 To 8
    If Not StringIsInt(GUICtrlRead($Input[$i])) Then
    MsgBox(0, "Error", "Eingaben unvollständig!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    ContinueCase
    EndIf
    Next
    For $i = 1 To 8 Step 2
    $random[$counter] = (Random(GUICtrlRead($Input[$i]), GUICtrlRead($Input[$i + 1]), 1)) * 1000
    $counter += 1
    If @error Then
    MsgBox(16, "Error", "Max muss größer als Min sein!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    ContinueCase
    EndIf
    Next
    $counter = 0

    For $i = 0 To 3
    $time[$i] = TimerInit()
    _sendkeys($titles[$i])
    Next

    While 1
    For $i = 0 To 3
    If TimerDiff($time[$i]) >= $random[$i] Then
    _sendkeys($titles[$i])
    $time[$i] = TimerInit()
    EndIf
    Next
    WEnd
    EndSwitch
    WEnd

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

    Func _sendkeys($windowtitle)
    WinActivate($windowtitle)
    SendKeepActive($windowtitle)
    Send("{Enter}")
    Send("{UP}")
    Send("{Enter}")
    EndFunc ;==>_sendkeys

    [/autoit]


    Allerdings muss ich sagen, ich weis nicht ob sie Funktioniert. Es könnte gut sein, dass noch der ein oder andere Fehler drin ist.
    Und fertig ist es auch noch nicht, so wird der Random Wert z.B. nicht aktualisiert, das dürfte aber kein Problem sein, das noch einzubauen. Ich hab jetzt allerdings keine Zeit mehr, eigentlich hätte ich schon längst lernen müssen :D.


    Naja, wenn du es selber hinbekommst, dann is gut, wenn nicht musst du auf den späten Abend warten :)


    P.S. Da hab ich noch ne Frage, also er macht es jetzt so, dass er aus den beiden Inputs einen Random-Wert erstellt. Im Moment benutzt er den für alle Zeitabstände, sodass die Zeitabstände immer gleich sind. Sollen die Variieren oder soll nur der erste Wert Random sein?


    Wenn ja, dann muss das, wie eben schon gesagt noch gemacht werden.


    Code
    Todo:
    - Inputs mit For-Schleife erstellen.
    - Bei abgelaufenem Timer neue Random-Werte generieren und nicht alte benutzen.
    - Abbruch Button


    PPS.
    - Werte in Sekunden angeben!
    - Bei´m deklarieren des Arrays am Anfang Titel der 4 Fenster eintragen!

    Einmal editiert, zuletzt von anno2008 (18. November 2008 um 19:34)

  • Hi,

    also sowas hab ich auch schon geschrieben, aber ohne Eingabe von Tasten (sendkey). Zweck des Ganzen war die Automatisierung eines Onlinespiels mit "menschlichen" Aktionen. Dabei wurde in einem Feld (so wie bei Dir der Desktop) nacheinander jedes Rechteck aus einer Matrix 17 x 10 an zufälliger Stelle angesteuert. Die Zeitabstände waren in gewissen Grenzen zufällig.

    Genau so interpretiere ich Dein Problem. In der Antwort einen höher (Anno2008?) ist die Gui und die Fehlerabfrage schon sehr gut implementiert. Du willst aber noch an zufälligen Positionen in den verschiedenen Fenstern "klicken"? Falls ja, solltest du die Fenster vorher und während des Laufens an den vorgegebenen Positionen "halten". sonst geht der Klick evtl. ins Leere.

    Der Programmcode unten enthält Teile der Lösung - aber der ist eben nicht für dieses Problem. Kann man aber anpassen... ich würde auch die relevanten Teile extrahieren falls das hilft.

    Spoiler anzeigen
  • Huhu,

    Und vielen dank für deine Mühe.

    Also zu deiner Frage

    Da hab ich noch ne Frage, also er macht es jetzt so, dass er aus den beiden Inputs einen Random-Wert erstellt. Im Moment benutzt er den für alle Zeitabstände, sodass die Zeitabstände immer gleich sind. Sollen die Variieren oder soll nur der erste Wert Random sein?

    Es sollte jedesmal en neuer wert ausgewertet werden.

    Sonst läuft es aber recht ordentlich

    aber 2 Fehler habe ich bemerkt wo ich nicht weiß an was es liegen könnte.

    Fehler 1: das Fenster Nr1 wird nicht immer geöffnet. die Namen der Fenster sind im Orginal LATEX, LATEX1, LATEX2, LATEX3 und so hab ich es auch in der oberen Zeiel eingegeben. Leider wird "Latex" nur ca. jedes 4 mal geöffnet. Latex1, Latex2, Latex4 aber immer.

    Fehler2: Mit den Zeiten stimmt etwas nicht so genau. es kann vot kommen das in einem fenster 2 Molekühle ganz schnell hintereinander gemacht werden obwohl es im 10sekundentakt sein soll und in nem anderen fenster passiert ewig nichts obwohl da auch en 10 Sekundentakt ist.
    kann es dara liegen das sichdas aktivieren der fenster teilweise schneidet?

    Aber lern heute abend lieber anstatt dich darum zu kümmern.

    Es reicht mir wen ich es morgen oder so erfahre.

    Möchte mich aufjedenfall nochmal für deine Hilfe bedanken.

    Gruß

    Flubber

  • Hi,
    ich hab auch heute nicht so viel Zeit, aber vielleicht tuts das ja schon so wie du das willst :)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>

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

    Global $Input[9], $random[4], $time[4], $counter = 0, $titles[4] = ["Titel1", "Titel2", "Titel3", "Titel4"], $values[4][2], $continue = True

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

    $GUI = GUICreate("Klicker :D", 234, 185, 477, 526)
    $ButtonStart = GUICtrlCreateButton("Start", 8, 128, 219, 25, 0)
    $ButtonStop = GUICtrlCreateButton("Stop", 8, 152, 219, 25, 0)
    $Label1 = GUICtrlCreateLabel("Fenster 1", 8, 36, 48, 17)
    $Label2 = GUICtrlCreateLabel("Fenster 2", 8, 60, 48, 17)
    $Label3 = GUICtrlCreateLabel("Fenster 3", 8, 83, 48, 17)
    $Label4 = GUICtrlCreateLabel("Fenster 4", 8, 108, 48, 17)
    $Label5 = GUICtrlCreateLabel("Minimum", 77, 8, 45, 17)
    $Label6 = GUICtrlCreateLabel("Maximum", 163, 8, 48, 17)
    $Input[1] = GUICtrlCreateInput("", 64, 32, 73, 21)
    $Input[2] = GUICtrlCreateInput("", 152, 32, 73, 21)
    $Input[3] = GUICtrlCreateInput("", 64, 56, 73, 21)
    $Input[4] = GUICtrlCreateInput("", 152, 56, 73, 21)
    $Input[5] = GUICtrlCreateInput("", 64, 80, 73, 21)
    $Input[6] = GUICtrlCreateInput("", 152, 80, 73, 21)
    $Input[7] = GUICtrlCreateInput("", 64, 104, 73, 21)
    $Input[8] = GUICtrlCreateInput("", 152, 104, 73, 21)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ButtonStart
    GUICtrlSetState($ButtonStart, $GUI_DISABLE)
    For $i = 1 To 8
    If Not StringIsInt(GUICtrlRead($Input[$i])) Then
    MsgBox(16, "Error", "Eingaben unvollständig!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    $continue = False
    ExitLoop
    EndIf
    Next

    If $continue = True Then
    For $i = 0 To 7 Step 2
    $values[$i / 2][0] = GUICtrlRead($Input[$i + 1])
    Next
    For $i = 1 To 8 Step 2
    $values[$i / 2][1] = GUICtrlRead($Input[$i + 1])
    Next

    For $i = 1 To 8 Step 2
    If GUICtrlRead($Input[$i]) > GUICtrlRead($Input[$i + 1]) Then
    MsgBox(16, "Error", "Max muss größer als Min sein!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    $continue = False
    ExitLoop
    Else
    $random[$counter] = (Random(GUICtrlRead($Input[$i]) * 1000, GUICtrlRead($Input[$i + 1]) * 1000, 1))
    $counter += 1
    EndIf
    Next

    If $continue = True Then
    $counter = 0

    For $i = 0 To 3
    $time[$i] = TimerInit()
    _sendkeys($titles[$i])
    Next

    While 1
    For $i = 0 To 3
    If TimerDiff($time[$i]) >= $random[$i] Then
    _sendkeys($titles[$i])
    $time[$i] = TimerInit()
    $random[$i] = (Random($values[$i][0] * 1000, $values[$i][1] * 1000, 1))
    EndIf
    Next
    WEnd
    EndIf

    $continue = True
    EndIf
    Case $ButtonStop
    Exit
    EndSwitch
    WEnd

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

    Func _sendkeys($windowtitle)
    WinActivate($windowtitle)
    WinWaitActive($windowtitle, "", 5)
    SendKeepActive($windowtitle)
    Send("{Enter}")
    Send("{UP}")
    Send("{Enter}")
    EndFunc ;==>_sendkeys

    [/autoit]
  • Hi anno

    Du ich habs versucht aber leider kommt sie meldung das max. > min.
    das ist ja schon logisch hab ich auch so eigegeben ober die meldung kommt immer.

    ich hab es dan mit dem alten skript verglichen aber den fehler nicht gefunden.

    und einfach reinkopieren wollte ich auch nicht.

    Gruß

    Cristal

  • Hi,
    kann sein, dass noch en paar Bugs drin sind, aber im großen und ganzen sollte es gehn, wie meine "DebugVersion" zeigt:

    Ja, manchmal ist der Wert etwas ungenau, aber ich denke, dass es nicht auf 200 Millisekunden ankommt, oder :P?

    Debug (sendet anstatt deinen angegebenen Keys einfach nur die oben angegebenen Informationen und ich hab noche n paar Sachen geändert, is aber nur zum Probieren!):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $Input[9], $random[4], $time[4], $titles[4] = ["Titel1", "Titel2", "Titel3", "Titel4"], $values[4][2]

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

    $GUI = GUICreate("Klicker :D", 234, 185, 477, 526)
    $ButtonStart = GUICtrlCreateButton("Start", 8, 128, 219, 25, 0)
    $ButtonStop = GUICtrlCreateButton("Stop", 8, 152, 219, 25, 0)
    $Label1 = GUICtrlCreateLabel("Fenster 1", 8, 36, 48, 17)
    $Label2 = GUICtrlCreateLabel("Fenster 2", 8, 60, 48, 17)
    $Label3 = GUICtrlCreateLabel("Fenster 3", 8, 83, 48, 17)
    $Label4 = GUICtrlCreateLabel("Fenster 4", 8, 108, 48, 17)
    $Label5 = GUICtrlCreateLabel("Minimum", 77, 8, 45, 17)
    $Label6 = GUICtrlCreateLabel("Maximum", 163, 8, 48, 17)
    $Input[1] = GUICtrlCreateInput("", 64, 32, 73, 21)
    $Input[2] = GUICtrlCreateInput("", 152, 32, 73, 21)
    $Input[3] = GUICtrlCreateInput("", 64, 56, 73, 21)
    $Input[4] = GUICtrlCreateInput("", 152, 56, 73, 21)
    $Input[5] = GUICtrlCreateInput("", 64, 80, 73, 21)
    $Input[6] = GUICtrlCreateInput("", 152, 80, 73, 21)
    $Input[7] = GUICtrlCreateInput("", 64, 104, 73, 21)
    $Input[8] = GUICtrlCreateInput("", 152, 104, 73, 21)

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

    GUISetState(@SW_SHOW)

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

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

    GUICtrlSetState($ButtonStart, $GUI_DISABLE)
    For $i = 1 To 8
    If Not StringIsInt(GUICtrlRead($Input[$i])) Then
    MsgBox(16, "Error", "Eingaben unvollständig!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    ContinueCase
    EndIf
    Next

    For $i = 0 To 7 Step 2
    $values[$i / 2][0] = GUICtrlRead($Input[$i + 1])
    Next
    For $i = 1 To 8 Step 2
    $values[$i / 2][1] = GUICtrlRead($Input[$i + 1])
    Next

    For $i = 1 To 8 Step 2
    If GUICtrlRead($Input[$i]) >= GUICtrlRead($Input[$i + 1]) Then
    MsgBox(16, "Error", "Max muss größer als Min sein!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    ContinueCase
    EndIf
    $random[$i / 2 - 0.5] = (Random(GUICtrlRead($Input[$i]) * 1000, GUICtrlRead($Input[$i + 1]) * 1000, 1))
    Next

    For $i = 0 To 3
    $time[$i] = TimerInit()
    _sendkeys($titles[$i], "0", "0", "0")
    Next

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

    While 1
    For $i = 0 To 3
    $var = Int(TimerDiff($time[$i]))
    If $var >= $random[$i] Then
    _sendkeys($titles[$i], $var, $random[$i], $i)
    $time[$i] = TimerInit()
    $random[$i] = (Random($values[$i][0] * 1000, $values[$i][1] * 1000, 1))
    EndIf
    Next
    WEnd
    EndSwitch
    WEnd

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

    Func _sendkeys($windowtitle, $text1, $text2, $text3)
    ;~ WinActivate($windowtitle)
    ;~ WinWaitActive($windowtitle, "", 5)
    ;~ SendKeepActive($windowtitle)
    ;~ Send("{Enter}")
    ;~ Send("{UP}")
    Send('Time: ' & $text1 & ' in Fenster ' & $i + 1 & ' ' & 'Random: ' & $text2)
    Send("{Enter}")
    EndFunc ;==>_sendkeys

    [/autoit]

    Normale Version:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $Input[9], $random[4], $time[4], $titles[4] = ["Titel1", "Titel2", "Titel3", "Titel4"], $values[4][2]

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

    $GUI = GUICreate("Klicker :D", 234, 185, 477, 526)
    $ButtonStart = GUICtrlCreateButton("Start", 8, 128, 219, 25, 0)
    $ButtonStop = GUICtrlCreateButton("Stop", 8, 152, 219, 25, 0)
    $Label1 = GUICtrlCreateLabel("Fenster 1", 8, 36, 48, 17)
    $Label2 = GUICtrlCreateLabel("Fenster 2", 8, 60, 48, 17)
    $Label3 = GUICtrlCreateLabel("Fenster 3", 8, 83, 48, 17)
    $Label4 = GUICtrlCreateLabel("Fenster 4", 8, 108, 48, 17)
    $Label5 = GUICtrlCreateLabel("Minimum", 77, 8, 45, 17)
    $Label6 = GUICtrlCreateLabel("Maximum", 163, 8, 48, 17)
    $Input[1] = GUICtrlCreateInput("", 64, 32, 73, 21)
    $Input[2] = GUICtrlCreateInput("", 152, 32, 73, 21)
    $Input[3] = GUICtrlCreateInput("", 64, 56, 73, 21)
    $Input[4] = GUICtrlCreateInput("", 152, 56, 73, 21)
    $Input[5] = GUICtrlCreateInput("", 64, 80, 73, 21)
    $Input[6] = GUICtrlCreateInput("", 152, 80, 73, 21)
    $Input[7] = GUICtrlCreateInput("", 64, 104, 73, 21)
    $Input[8] = GUICtrlCreateInput("", 152, 104, 73, 21)

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

    GUISetState(@SW_SHOW)

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

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

    GUICtrlSetState($ButtonStart, $GUI_DISABLE)
    For $i = 1 To 8
    If Not StringIsInt(GUICtrlRead($Input[$i])) Then
    MsgBox(16, "Error", "Eingaben unvollständig!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    ContinueCase
    EndIf
    Next

    For $i = 0 To 7 Step 2
    $values[$i / 2][0] = GUICtrlRead($Input[$i + 1])
    Next
    For $i = 1 To 8 Step 2
    $values[$i / 2][1] = GUICtrlRead($Input[$i + 1])
    Next

    For $i = 1 To 8 Step 2
    If GUICtrlRead($Input[$i]) >= GUICtrlRead($Input[$i + 1]) Then
    MsgBox(16, "Error", "Max muss größer als Min sein!")
    GUICtrlSetState($ButtonStart, $GUI_ENABLE)
    ContinueCase
    EndIf
    $random[$i / 2 - 0.5] = (Random(GUICtrlRead($Input[$i]) * 1000, GUICtrlRead($Input[$i + 1]) * 1000, 1))
    Next

    For $i = 0 To 3
    $time[$i] = TimerInit()
    _sendkeys($titles[$i])
    Next

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

    While 1
    For $i = 0 To 3
    If Int(TimerDiff($time[$i])) >= $random[$i] Then
    _sendkeys($titles[$i])
    $time[$i] = TimerInit()
    $random[$i] = (Random($values[$i][0] * 1000, $values[$i][1] * 1000, 1))
    EndIf
    Next
    WEnd
    EndSwitch
    WEnd

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

    Func _sendkeys($windowtitle)
    WinActivate($windowtitle)
    WinWaitActive($windowtitle, "", 5)
    SendKeepActive($windowtitle)
    Send("{Enter}")
    Send("{UP}")
    Send("{Enter}")
    EndFunc ;==>_sendkeys

    [/autoit]

    Wenn was nicht Funktioniert (bin mir fast zu 100% sicher, dass es nicht perfekt funktioniert :D) dann schreibs einfach.

    Einmal editiert, zuletzt von anno2008 (20. November 2008 um 15:01)

  • Nabend,

    Es läuft eigendlich recht gut

    Leider konnte ich aber die Pause Funktion noch nicht einbauen reicht es wen ich unten im skript folgendes schreib ??


    Func _break()
    Switch $break
    Case 0
    $break = 1
    Case 1
    $break = 0
    EndSwitch
    While $break = 1
    sleep(300)
    WEnd
    EndFunc


    Und bei Fenster 1 habe ich immer noch folgendes Problem

    Es wird jetzt zwar immer beim Start aktiviert. Leider aber nur noch selten im verlauf des Skriptes.

    Anstatt es zu aktivieren wird die aktion in dem bereits aktiviereten Fenster durchgeführt.

    Auf millisekunden kommt es wirklich nicht an :D der kürzeste Intervall beträgt 20 sekunden

    Gruß

    Flubber

  • Hi,
    für die Pause musst du mit AdlibEnable irgendwas reinbauen, weil das ja eigentlich ne Endlosschleife ist.

    Und zu dem Fenster, dann muss da was mit dem Titel nicht stimmen. Schau mal mit dem WindowInfo-Toll nach dem genauen Titel von Fenster 1.

  • Hallo

    Also das mit dem Fenster hab ich geklärt ich habs jetzt ausgetrickst und es umbenannt jetzt klappt es.

    Leider kommt häufig diese Problem
    [Blockierte Grafik: http://bildrian.de/n/b/32126e7c8badb91d.jpg]
    an was kann es liegen?

    Und ich habe mich dazu entshieden eine kleine Pause zwischen dem aktivieren des Fensters und des ersten "enter" zu machen.

    kann ich dazu einfach zwischen Zeile 79 und 80

    "sleep (2000)" schreiben ?

    Gruß

    Flubber