Befehl gesucht - Script pausieren bis ein bestimmtes Control gefunden wird

  • Hallo

    Suche Befehl der solange Script pausiert bis ein bestimmtes Control gefunden wird.
    Schon vieles probiert, keine Ahnung was ich falsch mache, vielleicht auch nur ein Tippfehler irgendwo.

    Danke

    mfg
    Markus

    Au3Info:
    >>>> Control <<<<
    Class: Afx:RibbonBar:40000000:8:10003:10
    Instance: 1
    ClassnameNN: Afx:RibbonBar:40000000:8:10003:101
    Name:
    Advanced (Class): [CLASS:Afx:RibbonBar:40000000:8:10003:10; INSTANCE:1]
    ID: 59398
    Text:
    Position: 0, 0
    Size: 1861, 140
    ControlClick Coords: 1306, 50
    Style: 0x54002800
    ExStyle: 0x00000000
    Handle: 0x00000000003C08E6

  • danke gute Idee, ControlGetPos gefiel mir noch besser und hat auf anhieb geklappt

    Code
    $Fritz14_Class_1 = "[CLASS:Afx:0000000140000000:0]"
    Local $pos[4]
    Do
      Sleep(20)
      $pos = ControlGetPos ( $Fritz14_Class_1, "", 59398 )
    Until $pos[0]+$pos[1]+$pos[2]+$pos[3] <> 0
  • Wenn man sowas macht sollte man aber bedenken, dass das Script in einer Endlosschleife hängenbleiben könnte. Daher würde ich grundsätzlich noch ein Timeout festlegen, welches dann zum Programmabbruch führt. Sofern kein sinnvoller Zeitraum definiert werden kann bis wann das Control/Fenster spätestens erscheinen sollte könnte man innerhalb der Schleife zumindestens noch Anwendereingaben abfragen um einen manuellen Programm oder Schleifenabbruch zu realisieren.

    Beispiele:

    [autoit]


    $timeout = 60000 ; in ms
    $Fritz14_Class_1 = "[CLASS:Afx:0000000140000000:0]"
    Local $pos[4]
    $timer = timerinit()
    Do
    Sleep(20)
    $pos = ControlGetPos ( $Fritz14_Class_1, "", 59398 )
    Until $pos[0]+$pos[1]+$pos[2]+$pos[3] <> 0 or timerdiff($timer) >= $timeout
    if $pos[0]+$pos[1]+$pos[2]+$pos[3] <> 0 then
    ; weitermachen....
    else
    ; funktion oder programm verlassen ggf. mit Fehlermeldung
    endif

    [/autoit]


    [autoit]


    Opt("TrayMenuMode", 1) ; Standard Traymenüeinträge (Skript pausieren/beenden) werden nicht angezeigt.
    $abbrechen = traycreateitem("Abbrechen")
    ;...
    $Fritz14_Class_1 = "[CLASS:Afx:0000000140000000:0]"
    Local $pos[4]
    Do
    if traygetmsg() = $abbrechen then
    ; z.b. exitloop oder return oder exit
    ; sofern du eine GUI hast könntest du auch guigetmsg verwenden um einen Abbrechen Button der GUI zu überwachen...
    endif
    Sleep(20)
    $pos = ControlGetPos ( $Fritz14_Class_1, "", 59398 )
    Until $pos[0]+$pos[1]+$pos[2]+$pos[3] <> 0
    if $pos[0]+$pos[1]+$pos[2]+$pos[3] <> 0 then
    ; weitermachen....
    else
    ; funktion oder programm verlassen ggf. mit Fehlermeldung
    endif

    [/autoit]
  • hatte zwecks übersicht mein timeout rausgenommen bzw. in meinem fall kann das script nicht hängen bleiben weil das control zu 100% in 2-3 sekunden erscheint,
    leider bekommt autoit die control positionsdaten ca. 500ms bevor das control am bildschirm erscheint, das passt noch nicht ganz wie ichs wollte:)

    heute die optimale lösung gefunden:

    [autoit]


    ;5 sekunden warten bis ControlID 59398 sichtbar ist, ansonst script beenden
    $Timer = TimerInit()
    Do
    If TimerDiff($Timer) > 5000 Then
    Exit
    EndIf
    Until ControlCommand($Fritz14_Class_1, "", 59398, "IsVisible")

    [/autoit]

    4 Mal editiert, zuletzt von m47 (22. Februar 2014 um 20:49)