Kann man in einem Control etwas auswählen, von dem nur die Position bekannt ist?

  • Hallo,

    ich habe ein Programm, bei dem sich mehrere Tabs öffnen (ähnlich Firefox) und in jedem dieser Tabs sind mehrere Comboboxen mit diversen Einträgen, von denen es immer einen bestimmten zu wählen gilt. Grundsätzlich gelingt mir das mit einem der Tabs; das schaut dann so aus:

    ControlCommand ("ech", "", "[CLASS:WindowsForms10.COMBOBOX.app.0.158d014; INSTANCE:2]", "ShowDropDown", "")
    ControlSend ("ech", "", "[CLASS:WindowsForms10.COMBOBOX.app.0.158d014; INSTANCE:2]", "a{Enter}")

    ControlCommand ("ech", "", "[CLASS:WindowsForms10.Window.8.app.0.158d014; INSTANCE:42]", "ShowDropDown", "")
    ControlSend ("ech", "", "[CLASS:WindowsForms10.Window.8.app.0.158d014; INSTANCE:42]", "e{right}h{Enter}")

    Hier wird also nur der erste Buchstabe "a" gewählt und mit Enter das Feld geschlossen. Beim nächsten Feld ist zuerst "e" zu drücken und dann darunter "h"; auch dann wird wieder mit Enter das Feld verlassen.

    Soweit funktioniert das. Beim nächsten Tab sind dann auch genau die gleichen Einträge in den gleichen Feldern zu wählen. Dummerweise sind dann aber die Klasse, IDs und Instanzen unterschiedlich, sodaß die Tastendrücke unerwünschterweise in ganz anderen Feldern stattfinden oder garnicht.

    Einzig gleich bleibt die Position und Größe der Felder. Kann ich daher mittels der Postion x,y und Größe w,h wie in der Doku erwähnt "X \ Y \ W \ H - The position and size of a control." das jeweilige Feld ausfüllen? Oder bin ich total auf dem Holzweg?

    Danke!

  • Hallo,

    mit dem Mut der Verzweiflung habe ich diese Lösung gefunden:

    MouseClick ( "left", 350, 220, 1, 1 )
    Send ("{home}a{enter}")

    MouseClick ( "left", 350, 260, 1, 1 )
    Send ("{ASC 091} {down 12}{right}h{Enter}")

    Es hat leider den Nachteil, daß ich nicht die Bildschirmauflösung ändern kann und das Programm Vollbilddarstellung benötigt. Vielleicht weiß jemand was besseres?

    Danke!

  • Wenn du immer auf einem Tab anfängst, dann kannst du mit
    ContrlGetPos die Position des Controls bestimmern, und dann auf den anderen Tabs entweder
    a) mit _WinAPI_WindowFromPoint das Handle des Controls holen und dann
    ControlCommand($handle,"","", "ShowDropDown", "") ... arbeiten :)
    b) mit MouseClick uns Send arbeitem