Seiten zählen & dementsprechend Handeln

  • Guten Morgen,

    bin noch recht neu in AutoIt ;)

    Dennoch habe ich folgendes Problem:

    Über ein Programm fahre ich einen Report, der mir später mehrere Seiten in Crystal Report dar stellt. Dies soll alles automatisch ablaufen, was ich bereits mit AutoIt realisieren konnte.

    Das Problem ist jetzt, dass ich in diesem Report immer verschieden viele Seiten habe. Diese Seiten werden per Screenshot separat abgelegt. Kann man AutoIt irgendwie sagen, dass er schauen soll, wieviele Seiten dieser Report hat um so dementsprechend die Screens erstellt? Über einen Button gelangt man auf die nachfolgenden Seiten des Report. Derzeit habe ich es wie folgt laufen:

    [autoit]

    WinWait("Fenster")
    If Not WinActive("Fenster") Then WinActivate("Fenster")
    WinWaitActive("Fenster")
    Send("{CTRLDOWN}m{CTRLUP}") ; um den Screen zu erstellen
    Sleep(2000)
    MouseMove(155,45) ; wandert die Maus auf den Button "Nächste Seite"
    MouseDown("left")
    MouseUp("left")
    Send("{CTRLDOWN}m{CTRLUP}")
    Sleep(2000)

    [/autoit]

    Das ganze vorerst für 4 Seiten. Da ich aber keine Lust habe, täglich abzugleichen ob alle Seiten vorhanden sind, wollt ich das gerne irgendwie realisieren.

    Jemand Rat? Danke im voraus!


    Edit:

    Bei dem bekomm ich 'ne Fehlermeldung =/

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    IF
    PixelGetColor(152, 38 ) = Hex('0x000000')
    Then
    Send("{CTRLDOWN}m{CTRLUP}")
    Sleep(2000)
    ElseIf
    PixelGetColor(152, 38 ) = Hex(0xADAA9C) ; PixelGetColor(Koordinaten der Maus A, Koordinaten der Maus B )
    Then

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

    Run("C:\WINDOWS\explorer.exe /root, C:\skript\Bilder")
    ....

    [/autoit]

    Daraus soll folgende Logik entstehen:

    Wenn Mauszeiger die Farbe schwarz anvisiert, mache einen Screenshot. Wenn aber Farbe grau angezeigt wird, gehe weiter und öffne den Ordner (da die Felder ausgegraut werden, wenn es die letzte Seite ist)

    5 Mal editiert, zuletzt von Nighty (5. Oktober 2009 um 10:32)

  • Hey...

    kannst du mal nen Screen von der Ansicht erstellen wo man auf den Button nächste Seite klicken kann?...
    normalerweise sollte man das ganze mit ControlClick() steuern können. Vieleicht bekommst du auch so die Seitenanzahl mit ControlGetText(). guck dir mal dazu die Bsps in der Hilfedatei an ... ^^

    Controlclick()

    MFg chris :D

  • Leider nein =/ Wüsste auch nicht wie :(

    Spoiler anzeigen
    [autoit]


    $farbe = PixelGetColor(152, 38)
    If $farbe = Hex(0x000000) Then

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

    ; Screens erstellen
    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)
    WinWait("T00LIS")
    WinWaitActive("T00LIS")
    Send("{CTRLDOWN}m{CTRLUP}")
    Sleep(2000)
    MouseMove(155,45)
    MouseDown("left")
    MouseUp("left") ; hier soll er hochspringen und wieder testen, ob dieser Pixel schwarz ist :(

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

    ElseIf $farbe = Hex(0xADAA9C) Then
    Run("C:\WINDOWS\explorer.exe /root, C:\skript\bilder")
    Sleep(1000)
    Send("{CTRLDOWN}a{CTRLUP}")
    Send("{ENTER}")
    Sleep(2000)

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

    Send("{APPSKEY}")
    Sleep(1000)
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{ENTER}")
    WinWait("Fotodruck-Assistent")
    Sleep(1000)
    Send("{ENTER}")
    Send("{ENTER}")
    Send("{ENTER}")
    Sleep(2000)
    Send("{ENTER}")
    Sleep(2000)
    EndIf

    [/autoit]
  • Ja das ist klar ^^
    Ich wüsste nur nicht, wie ich mit diesem Feld arbeiten kann. Ich kann ja schlecht eine Schleife bauen, die schaut, ob Seite 3 von 3 erreicht ist, weil pro Woche 1-2 Seiten hinzu kommen, dann aber auch mal wieder welche weg fallen. So weiß ich ja nicht, wieviele Seiten es gibt.
    In dieses Feld kann ich auch nicht schreiben, oder sonst was machen.

    >>>> Control <<<<
    Class: Static
    Instance: 1
    ClassnameNN: Static1
    Advanced (Class): [CLASS: Static; INSTANCE:1]
    ID: 17052
    Text: 3 of 3
    Position: 60, 3
    Size: 75, 22
    ControlClick Coords: 39, 10
    Style: 0x50000201
    ExStyle: 0x00000000
    Handle: 0x004F0D4E

    • Offizieller Beitrag

    Text: 3 of 3

    Hier hast du doch alles, was du willst: Text: 3 of 3
    Einfach die Datei laden, mit ControlGetText diesen Text ausgeben lassen. Was hinter 'of' steht ist deine Anzahl.

    Edit:
    So könntest du es machen:

    [autoit]

    Opt('WinTitleMatchMode', 2) ; somit wird das Fenster auch erkannt, wenn ein Teil des Titels angegeben wird
    $titel = 'Teil des Fenstertitels'
    $text = ControlGetText($titel, '', '[CLASS:Static; INSTANCE:1]')
    $anzahl = StringRegExpReplace($text, '(\d+\sof\s)(\d+)', '$2')

    [/autoit]
  • Du bist ein Fuchs, BugFix!
    Dank dir - läuft einwandfrei ^^

    Gelöst wie folgt:

    [autoit]


    ; Schleife zum durchlaufen
    Opt('WinTitleMatchMode', 2)
    $titel = 'T00LIS'
    $text = ControlGetText($titel, '', '[CLASS:Static; INSTANCE:1]')
    $anzahl = StringRegExpReplace($text, '(\d+\sof\s)(\d+)', '$2')

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

    $i = 0
    Do
    ; Screens erstellen
    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)
    WinWait("T00LIS")
    WinWaitActive("T00LIS")
    Send("{CTRLDOWN}m{CTRLUP}")
    Sleep(2000)
    MouseMove(155,45)
    MouseDown("left")
    MouseUp("left")
    $i = $i + 1
    Until $i = $anzahl

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

    Run("C:\WINDOWS\explorer.exe /root, C:\skript\screens")
    Sleep(1000)
    Send("{CTRLDOWN}a{CTRLUP}")
    Sleep(1000)
    Send("{ENTER}")
    Sleep(2000)

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

    Send("{APPSKEY}")

    [/autoit]
  • Wenn du sowieso klickst, kannst du auch MouseClick() nehmen ;)

    MouseMove(155,45)
    MouseDown("left")
    MouseUp("left")

    -->

    MouseClick("left",155,45,1,0)
    MouseClick("TASTE",x-koordinate,y-koordinate,anzahl clicks,mousebewegungsgeschwindigtkeit (0=keine bewegung -> sofort))

    Kleiner Tipp, wenn ich solche oberflächeneingaben gemacht habe, hab ich dies gerne mit tastatur-eingaben gemacht, also anstatt die maus zu bewegen und klicken zu lassen lieber STRG + W (kommt immer auf den shortcut fürs weiterblättern an). hat mir schon viele fehler vermieden

    Einmal editiert, zuletzt von TheRaZoR (5. Oktober 2009 um 11:00)

  • Ja das richtig :)
    Es enstanden viele Fehler, da das komplette Projekt aus 417 Zeilen besteht...
    Nur leider konnte ich es hier nicht vermeiden, Mausklicks anzuwenden, da es ein speziell für die Firma entwickeltes Programm ist, was noch mit sehr alten Standards arbeitet und ich so keine Tastenanschläge in diesem Report anweden kann ^^

    Danke trotzdem!
    Aber nun läuft es ja :) Wie sagt man so schön: "Never touch a running system" :D