Identifikation eines Controls bei wechselndem Klassen-Namen

  • Hallo,
    ich habe ein kleines Problem beim identifizieren eines Controls.
    immermal wieder wechselt die Klasse des Controls nach einem neuestart des Programms.
    Es handelt sich immer um einen Wert in der Form

    [autoit]

    "[CLASS:Afx:0D" & $hex & "0000:b; INSTANCE:1]"

    [/autoit]

    Wobei die Variable $hex immer einen zweistelligen Hex-Wert bekommt.

    Ich hatte bisher nur die Idee einer For-Schleife, die halt jeden Hexwert ausprobiert, bis sie ein Control antrifft... Das dauert aber bei den 255 Kombinationen relativ lange, da es auch meist erst Werte ab 88 sind...

    Ist evt. so etwas wie Wildcards möglich um das Control zu identifizieren? Eine ID hat es leider nicht. Oder wie muss ich die genante For-Schleife aufbauen, damit sie so schnell/effektiv wie möglich ist?

    Ich hoffe es hat jemand eine Idee.

    gruß Jan

  • Bei einem Fenster wäre das klar, aber bei einem Control, wie kann ich da Namen und enthaltenen Text erfahren???

  • Es handelt sich um ein Fenster in MS Access, welches nur nicht wirklich ein eigenes Fenster ist, sondern nur ein Control des Access-Fensters. Eine feste Position gibt es hier natürlich nicht, da es sich ja beliebig innerhalb des Access-Fensters verschieben lässt...
    Ich benötige von diesem Control die Positon, um dann entsprechende Klicks an Button etc. innerhalb des Controls zu senden...

    • Offizieller Beitrag

    Hi,

    aber wenn das Fenster einen Titel an und in diesem Fenster ein Button ist, denn du klicken willst, dann könntest du wenn es nicht anders geht, per Titel die Position des Fenster bekommen und dann realtiv zu diesem Fenster den Klick absetzen, da ich mal unterstelle, dass der Button immer im Fenster an derselben Position ist.

    So long,

    Mega

  • Ja, bloß ist das Fenster kein Fenster sonder nur ein Control, welches optisch wie ein Fenster ist und sich auch wie ein solches verschieben lässt.

    Wenn dir MS Access und das AutoIt-Window-Info-Tool zur Verfügung steht, kannst du dir das selber mal in Access angucken: Die Fenster die man innerhalb der Acces-Oberfläche hin und her schieben kann sind laut dem Window-Info-Tool nur einzelne Controls...

    Da es sich in meinem Fall um eine spezielles Programm handelt, das Access zu Grunde legt, trift man die gleiche Situation an, nur dass halt die Klasse wie gesagt variiert und eine ID nicht vorhanden ist...

    Um nun herauszufinden anwelcher Position sich dieses Control innerhalb von Access befindet verwende ich also

    [autoit]

    ControlGetPos ("Microsoft Access", "", "[CLASS:Afx:0D" & $hex & "0000:b; INSTANCE:1]")

    [/autoit]
  • Ja, wie gesagt, es handelt sich um ein spezialles Programm, dass auf Access basiert. Also optisch ist Access nicht mehr auf Anhieb erkennbar, aber unter der Haube des Programms arbeitet Access mit seinen Tabellen, Abfragen und Formularen. Dieses Programm soll nun von meinem AutoIt-Script ferngesteuert werden...

  • Ja, das wird eine Art Test-Software.

    Wie kann ich denn am besten die For-Schleife aufbauen, die Hexadezimal von 00 bis FF zählt, und das so schnell/effektiv wie möglich?
    Einfach eine For-Schleife von 0 bis 255 und dann jeweils in Hex umrechnen und dann jeweils in der schleife

    [autoit]

    $pos = ControlGetPos("SoftwareName", "", "[CLASS:Afx:0D" & $hex & "0000:b; INSTANCE:1]")
    If Not @error Then
    ExitLoop
    EndIf

    [/autoit]

    ausführen?

    Einmal editiert, zuletzt von jans16 (13. Juli 2007 um 13:04)

    • Offizieller Beitrag

    Hi,

    ganz ehrlich. Ich würde nicht in diese Richtung denken. Das sieht mir nach einer Hand am Arm Lösung aus.

    Gibt es nicht kostenlose Tools (Quicktest) oder sowas mit denen man hier schnell weiter kommt?

    Aber wenn du schon solch wackeligen Lösungen akzeptieren würdest, hast du mal probiert, das Fenster zu aktivieren und dann einfach enter zu senden?

    So long,

    Mega