Autoit v2 newbee braucht hilfe...

  • hallo, also ich hoffe ich darf meine frage hier stellen wenn es auch nicht um die version 3.0 geht...

    als erstes will ich sagen das ich mein autoit für andere anwendung verwende wie ihr wahrscheindlich.... ich zeig euch mal ein programm von mir... ausser leftclick und rightclick ist das eigentlich alles was ich kann ^^

    Programm anfang

    sleep, 5000

    Repeat, 100000000

    sleep, 30000

    send, !6
    send, !7
    sleep, 6000
    send, !8
    send, !9
    sleep, 6000
    send, !0
    sleep, 3000


    Repeat, 200

    send, {Tab}
    sleep, 500
    send, f
    sleep, 500
    send, 5
    sleep, 1000
    Repeat, 6
    send, 2
    send, 1
    send, 9
    sleep, 500
    Endrepeat
    Endrepeat

    Endrepeat

    Programm ende

    Ich verwende das um in pc spielen teile zu automatisieren... keine onlinegames sondern ein paar offlinegames...

    meine frage ist jetzt... es ist normalerweise so das der fokus immer auf dem pc spiel sein muss sonst klickt er natürlich nicht die tasten ingame... habe jetzt aber so mitbekommen das es eventuel möglich ist autoit zu sagen das er direkt seine tasten an das programm schickt und ich das Spiel nicht mehr im fokus haben muss ... ich kann neamlich nebenher nix mehr tun auf dem pc wenn ich das script am laufen habe...

    wenn das gehen würde könnte ich nebenher sürfen etc ... aber jetzt brauchen meine programme einfach den fokus sonst geht nix .. wäre nett wenn es so eine wunderzeile gebe wie

    "Nimm die anwendung titanquest und drücke direkt deine tasten dort rein... ohne das ein fokus da ist "

    ich hoffe ihr habt mich verstanden. Habe mich bemüht mein problem gut zu erklären...

    habe es vorher mit einer vm probiert und nach 3 tagen einarbeitung musste ich aufgeben... mit vm gehts es nicht

  • Zitat

    Original von gtaspider
    Hallo

    Wie es mit AutoIt v2 geht weiß ich nicht, aber für v3 müsste es mit ControlSend gehen! Warum benutzt du denn noch v2? Das ist doch voll "out"^^ V3 hat soooo viele Vorteile gegenüber V2...

    Probiers einfach mal aus... http://www.autoitscript.com/autoit3/downloads.php

    Mfg Spider

    weil ich wie gesagt schon sehr lange mit der alten arbeite und sich in der neuen teilweise der syntax geändert hat

    ich brauche wirklich diese vorteile von v3 nicht ausserwenn dieses ControlSend nur in der 3 er geht... und auch so funktioniert wie ich es will..

    aus repeat 100 wurde for etc... und ich bin ja vollkommen zufrieden mit der vesion ...

    kannst mir mal die zeile reinschreiben mit ControlSend wie das so aussehen würde im programm das er z.b auf titanquest " ziehlt"

    Einmal editiert, zuletzt von Bullz (9. September 2007 um 13:40)

  • ControlSend("title", "text", ControlID, string)

    Für Titanquest könnte es so lauten:

    [autoit]

    ControlSend("Titanquest", "", "", "6000")

    [/autoit]

    Den "Fenstertitle"(gibt's auch trotz FullScreen) musst Du rausfinden, meistens einfach nur der Name vom Spiel. Der Text ist egal, da Du ja nicht auf ein Fenster im eigentlichen Sinn zugreifst. Wenn Du nur im Game "sinnlos" Tasten drücken willst, kannst Du dir die ID auch sparen.
    Für String nimmst Du einfach das, was Du senden möchtest.

  • Zitat: "ich brauche wirklich diese vorteile von v3 nicht ausserwenn dieses ControlSend nur in der 3 er geht... und auch so funktioniert wie ich es will.. " Zitatende.

    Also ich rate Dir das Du auf AutoIt-3 wechselst. hat mehr vorteile als Nachteile und besonders, die paar Änderungen kann man binnen 1-2 Stunden in den alten Scripten überarbeiten.
    Ließ die History durch und suche in Deinen Scripten nach den alten befehlen und ersetze sie durch die neuen und passe die Anwendungsweise dieser Befehle an. Eigentlich sollte das doch nicht der große Aufwand sein. Ich bin vom Batching zu AutoIt umgestiegen und das war ein großer Schritt für mich, aber ein kleiner für die Menschheit. LOL

    Also, wieso bei etwas altem bleiben, wenn das neuere doch mehr Vorteile hat. Die History ist ja gerade dafür sehr sehr gut zu nutzen und somit doch auch sehr sinnvoll.

    Gruss, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Zitat

    Original von penta.phoenix
    ControlSend("title", "text", ControlID, string)

    Für Titanquest könnte es so lauten:

    [autoit]

    ControlSend("Titanquest", "", "", "6000")

    [/autoit]

    Den "Fenstertitle"(gibt's auch trotz FullScreen) musst Du rausfinden, meistens einfach nur der Name vom Spiel. Der Text ist egal, da Du ja nicht auf ein Fenster im eigentlichen Sinn zugreifst. Wenn Du nur im Game "sinnlos" Tasten drücken willst, kannst Du dir die ID auch sparen.
    Für String nimmst Du einfach das, was Du senden möchtest.

    title und string ist klar

    text und controlid sind mir nicht klar was das ist ist kann mir einer nur schnell kurz sagen was das ist ... auch wenn ich es nicht brauche will nicht dumm sterben ^^

    ja ihr habt eh recht ... aber für mich ist bisher meine autoit version perfekt. Ich vermisse irgendwie nix ... deswegen sträub ich mich gegen das wechseln aber jetzt kann sich das ändern
    ---------------------------------------------------------
    sleep, 5000

    Repeat, 100000000

    ControlSend("Titanquest", "", "", "r")
    sleep, 5000

    Endrepeat
    ----------------------------------------------------------

    dieser code sollte mir alle 5 sek die taste r drücken als test... autoit gibt ne fehlermeldung aus kennt den controlsend befehl nicht... kann es sein das es den erst mit version 3 gibt ? Gibt es den befehl in v2 und wenn ja heist er dort anders ?

    • Offizieller Beitrag

    Hi!

    Ziemlich sicher, dass es ihn erst sein v3 gibt. Und die Umstellung ist nicht viel Arbeit, aber viel Ertrag. AutoIt ist viel (!) schneller und sendet Befehle auch wesentlich sicherer und zuverlässiger.
    Du musst ja einfach nur die Funktionsnamen in die Hilfe eingeben und die Syntax anschauen...

    peethebee

  • jaja jetzt habt ihr es geschaft ... ärgere mich schon mit v3 rum ^^ wenn das gehen würde wirklich wäre das der oberhammer ... hehe

    edit: juhu es klappt wirklich ich haette 1000 euro gesetzt das es nicht geht... super, werd version 2 nie mehr angreifen verprochen...


    1.) was ich aber komischerwiese nicht zusammengebracht habe... was mich aber 0 stört nebenher...
    ---------------------------------------------
    Sleep ( 5000 )

    for $__n1_ = 1 to 100000000
    ControlSend("Wordpad", "", "", "r")
    Sleep ( 5000 )

    next
    -----------------------------------------
    mit diesem programm wollte ich das er mir die r ins wordpad reinschreibt.. macht er aber nicht ... kann mir wer sagen was ich da falsch mache ?

    2.) Was jetzt noch besser wäre... wenn ich titanquest 2 mal starte.. ist es möglich das ich ihm sage das er nur auf ein fenster seine befehle schicken soll ? Da habe ich ja ein Problem da die Games den gleichen title haben...
    ---------------------------------------------
    Sleep ( 5000 )

    for $__n1_ = 1 to 100000000
    ControlSend("Titanquest", "?", "?", "r")
    Sleep ( 5000 )

    next
    -----------------------------------------

    2 Mal editiert, zuletzt von Bullz (9. September 2007 um 17:27)

  • @Bullz

    Zu deinem WortPad-Problem: Bei mir ist der Fenstertitel von WordPad folgender: Dokument - WordPad

    Folglich müsste dein Code so lauten:

    [autoit]

    Sleep ( 5000 )

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

    for $__n1_ = 1 to 100000000
    ControlSend("Dokument - Wordpad", "", "", "r")
    Sleep ( 5000 )

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

    next

    [/autoit]

    Die for-Schleife als solche ist in Ordnung, es kann also eigentlich nur am Fenstertitel liegen.

    • Offizieller Beitrag

    Für Fenstererkennung kannst du auch Teile des Titels verwenden mit:

    [autoit]

    Opt("WinTitleMatchMode", 2)

    [/autoit]

    Damit wird von "Dokument 1 - Wordpad" sowohl "Dokument" als auch "Wordpad" als Titel erkannt.


    Wenn du mehrere Instanzen eines Programms startest, ändere doch den Fenstertitel mit WinSetTitle.

  • vielen dank das wars... heatte ich auch selber draufkommen können ich depp...


    Zitat

    Original von BugFix
    Für Fenstererkennung kannst du auch Teile des Titels verwenden mit:

    [autoit]

    Opt("WinTitleMatchMode", 2)

    [/autoit]

    Damit wird von "Dokument 1 - Wordpad" sowohl "Dokument" als auch "Wordpad" als Titel erkannt.


    Wenn du mehrere Instanzen eines Programms startest, ändere doch den Fenstertitel mit WinSetTitle.

    ehm ja ich versteh nur bahnhof. Liegt aber daran das ich noch nicht das wiki tut durchgelesen habe.... werde ich dann nach meiner analysis prüfung anstarten bis dahin darf ich dumm fragen ^^

    1.) Dieser Befehl den du verwendest hast sorgt dafür das nur der String passen muss ? z.b Anwendungname: "bullz haus"
    Opt("bullz", 2) und Opt("haus", 2) und Opt("llz", 2) wählen alle das gleiche fenster aus ? Das wird eh nicht stimmen... würde mir auch nix helfen da ich so arbeiten will das das fenster nie einen fokus braucht..

    2.) habe googelt das ist ein befehl im autoit..

    WinSetTitle("Untitled - ", "", "My New Notepad")

    Ist autoit so mächtig und kann einfach im laufenden betrieb z.b ein Game umbennen ? von "Titanquest" auf "Titantest"

    Einmal editiert, zuletzt von Bullz (9. September 2007 um 21:23)

    • Offizieller Beitrag

    Etwas genauer:

    [autoit]

    Opt("WinTitleMatchMode", 2)

    [/autoit]

    Wird dem Skript vorangestellt, "WinTitleMatchMode" ist ein Schlüsselwort,dass besagt, wie Fenster erkannt werden. Flag 2 heißt, dass Teile des Fensternamens ausreichen.

    Gib mal in der Hilfe 'Opt' ein und schau dir die unterschiedlichen Schlüsselwörter an. Sind viele interessante Optionen.

    WinSetTitle() läßt sich natürlich nur auf Programme anwenden, die im Fenstermodus laufen.
    Aber ich verwende z.B. eine Steuersoftware in mehreren Instanzen. Damit ich sie unterscheiden kann, benenne ich sofort nach dem Aufruf das aktive Fenster um.

    Probiere es einfach mal aus.

  • thx ich sehe schon ich muss mal schmöckern gehen thx für die hilfe

    Edit:
    nebenher kann es sein das man nicht alle fenster mit der methode umbennen kann ? Das es bei wordpad etc geht glaub ich schon werd ich auch testen aber das z.b titanquest so einfach damit umändern kann weis ich nicht werde es aber probieren...

    habe ein bild angefügt. Leider schickt er die r nur dann wenn ich das fenster im fokus habe... sonst schickt er keine r .... in einem pc spiel ging es aber so

    was mach ich falsch ? effektiv will ich 2 scripte dann am rennen haben die je auf notebook r schicken aber beide ohne fokuse... das ist wichtig will ja nebenher sürfen etc...

    Sleep ( 2000 )

    for $1 = 1 to 100000000
    ControlSend("daoc1.txt - Editor", "", "", "r")
    Sleep ( 2000 )

    next

    was muss ich ändern ?

  • hallo thx.... wie komme ich auf diese controllid ? die muss man ja wissen dann ist es ja np..

    was ist z.b die controllid von wordpad ?

    die hilfe gibt nix gescheites her darüber ausser das man sie selbst erstellen kann

    • Offizieller Beitrag

    Hallo

    Die ID Findest du mit dem AutoIt Window Info Tool den du normalerweise hier findest: C:\Programme\AutoIt3\Au3Info.exe

    Dann einfach mit der Maus auf das Fadenkreuz in der GRuppe "Finder Tool" auf das Control schieben was du brauchst! Dann gibt er dir unten unter "Control" u.a. ClassnameNN zurück! Das ist der Name des Controls...


    Mfg Spider

  • ja gerade selber draufgekommen ... thx :) jetzt kann ich mal gescheit alle fenster erreichen... aus diesen

    Opt("WinTitleMatchMode", 2)

    werde ich aber noch immer nicht schlau. Ich brauch ihn zwar eh nicht mehr aber über den steht nicht mal was in der hilfe jedenfalls bei den funktionen...

    für was würde ich diesen befehl brauchen ?

    Einmal editiert, zuletzt von Bullz (11. September 2007 um 12:09)

    • Offizieller Beitrag

    Hallo

    Guck in der Hilfe unter der Funktion "Opt"


    Mfg Spider

  • also ich bin wirklich brav am probieren. Hilfe lesen etc aber jetzt haben sich doc 1 Problem herauskristallisiert. Als kleinen Test will ich einen Einlogger für wow schreiben.

    opt("WinTitleMatchMode", 2)
    Run("F:\Games\World of Warcraft\wow.exe")
    WinWaitActive("World of Warcraft")
    ;sleep(2000)
    ;WinSetTitle("World", "", "test")
    controlSend("World", "", "", "abc{TAB}def{ENTER}")

    1WinWaitAktive() funktioniert einfach nicht. Er wartet nicht ab bis das Fenster wirklich fertig geladen hat... Klar kann ich einfach ne fixe Zeit eingeben... aber das habe ich jahrelang mit v2 gemacht und jetzt will ich es gescheit machen... was mach ich falsch ? Flag gibst keines... jedenfalls was ich noob aus der Hilfe rausgelesen habe... kann wer da helfen ?

    4 Mal editiert, zuletzt von Bullz (11. September 2007 um 21:33)

  • Spoiler anzeigen

    Zu 1.
    WinWaitActive() wartet nur, bis das Fenster aktiv ist, ob in dem Fesnter etwas noch nicht geladen wurde ist der Funktion egal. Schau mal, ob es dazu ein Flag gibt, wenn nicht bleibt dir wohl nur die Sleep-Methode.

    Zu 2.
    Das ergibt so keinen Sinn, da die Tasten ja hintereinander gesendet werden. Vielleicht weiß ja jemand was darüber.

    Zur MessageBox
    Du benötigst InputBoxen.
    $name = InputBox("title", "text", ["default"])
    $passwort = InputBox("title", "text", ["default"])