Wenn Script läuft, wird arbeiten am PC unmöglich

  • Hallo,

    Ich stoße auf folgendes Problem. Seit kurzen nutze ich wieder ein Script von Autoit. Dieses aktiviert das gewünschte Fenster gibt eine Tastenkombination eun unf fertig. Noch 40 Sekunden wird der vorgang wiederholt.

    Leider macht mir dies das arbeiten in dieser Zeit an meinem PC unmöglich. z.B schreibe ich einen Bericht in Word, wird alle 40 sekunden das andere Programm aktiviert dann muss ich erst wieder auf word klicken damit ich nicht im andern Fenster weiter schreibe.

    Wie könnte ich ein solches Problem umgehen?

    Betriebssystem Windows 7

    Liebe Grüße

    Flubber

  • *Glaskugel auspack* :)

    Indem du uns verratest was für ein Programm das ist wo du alle 40 sekunden ein klick machst man kann das in vielen Programmen auch in hintergrund machen dazu müssten wir aber wissen um was für ein Programm es hier geht und ohne Quellcode können wir dir schlecht helfen.

    *Glaskugel defekt wiedereinpack* :D
    Gruss DevFly

  • Hallo,

    Das Programm welches ich nutze heißt Latex, Ich lasse dieses 4 mal parallel laufen. Folgendes soll mein Skript ausführen. Es soll ein Version von Latex wählen, dann "Enter" "Pfeil noch oben" "Enter" drücken (nacheinander), dann durch einen ermittelten Zeitpunkt welches Zufallsmäßig aus einer von mir zuvor festgelegten Zeitspanne ausgewählt wird den Vorgang wiederholen.
    Das soll mit jeder Version von Latex unabhängig voneinander passieren. Dazu habe ich folgendes Skript benutzt.

    Nun möchte ich aber am PC weiter arbeiten und nicht jedesmal unterbrochen werden wen Latex eine seiner 4 Versionen wählt.

    Mein Skript

  • Hallo Flubber,

    du könntest vor dem aktivieren des "Unterfensters" die Mausposition und den Fenstername des aktiven Fensters auslesen und nach dem du die Tastenkombination im "Unterfenster" ausgeführt hast, das gespeicherte Fenster wieder aufrufen und die Mausposition wieder auf die vorherige Position setzen.

    Schau dir dazu mal dei Befehle an:
    WinGetTitle
    MouseGetPos
    WinActivate
    MouseMove

    Gruß
    Steffen

  • Also so ganz den Sinn des Programms hab ich noch nicht verstanden. Wozu ist Latex gut? Sofern ich nicht zu doof zum googlen war ist Latex doch selbst eine Scriptsprache um Makros für Tex (Programm zur Darstellung von mathematischen Zeichen) zu erstellen ???
    Was bewirkt denn das zufällige senden der Tastenkombination an das Latex Fenster?

    Vom Sinn abgesehen gibt es vermutlich auch andere Wege Kommandos an das Fenster zu schicken die keinen Fensterfocus erfordern. Schau dir dazu die control****** Funktionen in der Hilfe an.

  • Zitat

    du könntest vor dem aktivieren des "Unterfensters" die Mausposition und den Fenstername des aktiven Fensters auslesen und nach dem du die Tastenkombination im "Unterfenster" ausgeführt hast, das gespeicherte Fenster wieder aufrufen und die Mausposition wieder auf die vorherige Position setzen.

    Schau dir dazu mal dei Befehle an:
    WinGetTitle
    MouseGetPos
    WinActivate
    MouseMove

    Hmm, ich glaube nicht das dies meine Lösung sein wird. Es werden immer Textteile beim schreiben eines Berichtes verloren gehen wen Autoit Latex öffnet. Ich glaube ich bekomme dabei zuviele Unterbrechungen.

    Zitat

    Also so ganz den Sinn des Programms hab ich noch nicht verstanden. Wozu ist Latex gut? Sofern ich nicht zu doof zum googlen war ist Latex doch selbst eine Scriptsprache um Makros für Tex (Programm zur Darstellung von mathematischen Zeichen) zu erstellen ???
    Was bewirkt denn das zufällige senden der Tastenkombination an das Latex Fenster?

    Vom Sinn abgesehen gibt es vermutlich auch andere Wege Kommandos an das Fenster zu schicken die keinen Fensterfocus erfordern. Schau dir dazu die control****** Funktionen in der Hilfe an.

    Ich starte mit latex eine chemische Reaktion. Jedesmal wird mit dem Tasten druck "enter" "up" "enter" eine neue Reaktion eingeleitet. Diese Startet immer zufallsmäßig in dem von mir vorgegebenen Zeitraum.

    Wie meinst du das mit dem Fensterfocus? Infos ans Fenster senden ohne dies aktiv werden zu lassen? Das wäre die lösung für mein Problem!

    Liebe Grüße

    Flubber

  • Sofern die "Reaktion" auch ohne Tastatur Eingaben (z.B. Buttondruck im Fenster) gestartet werden kann schau dir

    [autoit]

    controlclick(...)

    [/autoit]


    an.

    Andernfalls schau dir

    [autoit]

    controlsend(...)

    [/autoit]


    an.

    Beides funktioniert ohne das Fenster aktiv zu haben, selbst wenn man das Fenster unsichtbar macht klappt das:

    [autoit]

    winsetstate(...,...,@SW_HIDE)

    [/autoit]

    Um die notwendigen Details (CLASS, CLASSNAME...) eines Buttons oder Fensterbereichs herauszufinden verwendet man au3info (Scite->Tools->au3info)

  • Ohje, da füchte ich brauche ich ziemlich viel Hilfe.

    Beim Script hat mir schon ein bekannter geholfen. Irgendwie stehe ich mit autoit auf dem Kriegsguß (leider)

    Aber ich würde es wiefolgt angehen.

    Bis Zeile 75 würde ich das Script so stehen lassen. den hier wird ja noch nichts gesendet.

    Und im letzten teil würde ich wiefolgt forgehen.

    Aus

    wird

    Zitat

    Func _sendkeys($windowtitle)
    ControlSend ( "$windowtitle", "text", controlID, "{Enter}")
    ControlSend ( "$windowtitle", "text", controlID, "{UP}")
    ControlSend ( "$windowtitle", "text", controlID, "{Enter}")
    EndFunc ;==>_sendkeys

    Leider bin ich mir unsicher was "Text" und "Controlid" beihnhalten soll

    Liebe Grüße

    Flubber

  • Au3info sollte dir alles liefern was du benötigst.
    Den Parameter Text benötigt man normalerweise nicht, dieser hilft der Funktion lediglich zwischen zwei ansonsten identischen Fenstern zu unterscheiden, was ggf. bei der Automatisierung von Installationen hilfreich sein kann (Titel bleibt gleich aber der Text im Fenster ändert sich bei jedem Installationsschritt). Wie bei fast jeder Funktion übergehst du den Parameter durch einen leeren String "" .

    Die Controlid bekommst du normalerweise durch au3info.

    Beispiel:

    Spoiler anzeigen
    [autoit]


    ; die ganzen sleep sind nur zur veranschaulichung... ein sehr kurzes sleep nach run ist aber empfehlenswert oder du prüfst mit winwait bevor du anfängst dinge ans fenster zu senden
    run("notepad.exe")
    Sleep(2000)
    ControlSend("Unbenannt - Editor","","[CLASS:Edit; INSTANCE:1]","a" & "{ENTER}" & "b")
    ; oder
    Sleep(2000)
    ControlSetText("Unbenannt - Editor","","[CLASS:Edit; INSTANCE:1]","") ; inhalt löschen
    Sleep(1000)
    ControlSetText("Unbenannt - Editor","","[CLASS:Edit; INSTANCE:1]","c" & @crlf & "d") ; kann wohl keine sonder tasten wie enter...
    Sleep(1000)
    ControlSetText("Unbenannt - Editor","","[CLASS:Edit; INSTANCE:1]","") ; inhalt löschen
    ;oder
    Sleep(2000)
    ControlSend("Unbenannt - Editor","","Edit1","e" & "{ENTER}" & "f") ; geht auch mit classNN, siehe tab control in au3info...
    ;oder
    Sleep(2000)
    ShellExecute("msconfig")
    Sleep(2000)
    ControlClick("Systemkonfiguration","","[CLASS:Button; INSTANCE:33]") ; klickt auf button hilfe von msconfig...

    [/autoit]


    [Blockierte Grafik: http://i.imgur.com/FN3yf.png] [Blockierte Grafik: http://i.imgur.com/CtCWz.png]

    Einmal editiert, zuletzt von misterspeed (30. August 2011 um 03:17)

  • Also,

    Ich habe versucht mit Window Info die Classe und die Instance zu identifizieren.

    Jedoch steht werder in der classe noch in der Instance ein Eintrag. darauf hin habe ich es folgendermaßen in mein Skript geschrieben

    ControlSend ( "$windowtitle", "", "", "{Enter}")
    ControlSend ( "$windowtitle", "", "", "{UP}")
    ControlSend ( "$windowtitle", "", "", "{Enter}")

    Leider funktionert mein Skript nun nichtmehr! Was läuft falsch?

    Liebe Grüße

    Flubber

  • Poste am besten das komplette Ergebnis von au3info.

    EDIT: Ausserdem darfst du eine Variable natürlich nicht in Anführungszeichen setzen...

    [autoit]


    ControlSend ( $windowtitle, "", "", "{Enter}") ; wenn dann so...

    [/autoit]

    Die Controlid leer lassen dürfte aber nicht gehen, daher bitte vollständiges Log aus dem Tab summary.

  • Hi

    Ich habe die Anführungszeichen weg genommen. Nun läuft es perfekt

    Es gibt doch eine möglichkeit wo ich das Skript testweise laufen lassen kann um zu sehen welche Zahlen genau aus dem Randomwert ermittetlt werden oder?