suche _ControlGetAdvancedMode

  • Hallo zusammen,
    in dem Window Info-Tool wird u.a. auch der "Advanced Mode" bzw. "Advanced Class" angezeigt.

    Ich suche eine Funktion mit der man genau diesen "Advanced Mode" aus einem Fensterhandle auslesen kann.
    Hat einer von euch einen Tipp oder eine Lösung?
    Besten Dank.

    Gruß Schumi

  • Vielen Dank. Das ist es leider nicht.
    Ich suche eine Funktion die mir den "Advanced Mode"-Namen oder Inhalt liefert.

    zB. so...

    Code
    $handle = WinActivate("Mein Fenster")
    $sAdvancedMode = _ControlGetAdvancedMode($handle)
    
    
    ... und in $sAdvancedMode steht dann [NAME:MyWindow]

    Ich habe nichts dazu gefunden. Hast du noch einen anderen Tipp?

    Gruß Schumi

  • Doch das ist es.
    Lies die Hilfe zum Thema nochmal ganz genau.

    Das was Au3Info ausgibt ist lediglich ein zusammengebastelter String in einer Form so, dass man es gleich im Advanced-Window-matching-mode der Window-und -controlfunktionen verwenden kann.
    Die einzelnen Werte bekommst du z.B. über WinGetTitle, WinGetClassList, WinActive, WinList(missbrauchen für Instance)... etc.

    Daraus kannst du dir dann den gewünschten String zusammenbasteln.

    Ein Wert namens "Name" für den Advanced-Mode ist mir im übrigen unbekannt.

  • Also nur zur Sicherheit - hier am Beispiel von Excel2010...
    lt. Win-Info-Tool steht hier:

    Advanced Mode [CLASS:EXCEL7; INSTANCE:1]

    Code
    #include "Array.au3"
    
    
    Opt("WinTitleMatchMode", 4)
    $handle = WinGetHandle("Microsoft Excel - Mappe2")
    $aClass = StringSplit(WinGetClassList($handle),@LF)
    _ArrayDisplay($aClass)

    ... und mit dem Test hier bekomme ich 52 Class angezeigt. An der 31. Stelle habe ich "EXCEL7" gefunden.
    So richtig eineindeutig ist das nicht.

    Bekommt man das etwas gezielter hin? Oder habe ich dich noch nicht richtig verstanden?
    Gruß Schumi

  • lt. Win-Info-Tool steht hier:

    Advanced Mode [CLASS:EXCEL7; INSTANCE:1]

    Schaust du bei den Angaben für das Fenster oder für ein bestimmtes Control?
    Das Excelfenster sollte als Klasse nämlich eher XLMAIN heißen, während EXCEL7 eine Controlklasse ist.

    WinGetClassList liefert eine Liste aller vorkommenden Control-Klassen in diesem Fenster.
    Diese Klassen haben also nichts mit der Fensterklasse zu tun.
    Die Klasse des Fensters bekommst du hingegen mit _WinAPI_GetClassName().

    Ich denke aber es wäre aber deutlich sinnvoller zu erläutern was du eigentlich am Ende erreichen willst.
    Wozu benötigst du das alles?
    Du versuchst einen String zusammen zu basteln deren Bedeutung dir am Anfang des Threads noch gar nicht klar war.
    Also was willst du erreichen - wofür benötigst du das ganze?

  • Ja, was will ich erreichen:
    Mit Autoit lese oder schreibe ich Daten aus bzw. in eine GUI. Und dabei benutze ich auch Fensterelemente der GUI.
    Mit den ClassNN kann man das nur bedingt machen - die ändern sich schnell und ich muss das Script laufend anpassen.
    Am besten geht das mit den "Advanced Mode"-Namen.

    Im Laufe der Zeit bekomme ich auch mal eine neue Version der GUI. Dann muss ich natürlich alle "Advanced Mode" überprüfen.
    Die ClassNN habe sich in jedem Fall geändert. Bei den "Advanced Mode" habe noch keine Änderungen gefunden. Ich muss es aber dennoch prüfen.

    Zur Prüfung der ClassNN habe ich das Script von Großvater benutzt. Ein tolles Teil und hier zu finden.
    https://autoit.de/index.php/Thread/27373-WinGetControls-Controls-eines-Fensters-auslesen/?postID=224614&highlight=wingetcontrol

    Und genau dieses Script würde ich gern um die gesuchte Funktion erweitern. Damit kann ich dann die komplette GUI auslesen und sehe alles auf einen Blick.
    Ich will mir also eine eigene Art "Win-Info-Tool" bauen. Damit kann ich dann meine Scripte sehr viel schneller anpassen und muss nicht alle Infos mit Window-Info suchen und kopieren.

    Gruß Schumi

  • Hallo AspirinJunkie,
    ich habe jetzt mal so einiges nach deinem Muster getestet. Und was soll ich sagen ... es ist so wie du sagst.

    Bei meiner GUI handelt es sich um eine .NET-Anwendung. Und hier sieht das in dem Window-Info-Tool anders aus.
    Hier im Bild ein Beispiel:

    Hier kann man leider nichts zusammenbauen. Hier findest du auch [NAME:tbFirmenname] . Und darüber kann man das Control wunderbar ansprechen.

    Gruß Schumi

  • Hier findest du auch [NAME:tbFirmenname]

    Ah ok - für Controls.
    Für Fenster gibt es das nicht und für Controls kannte ich das bisher noch nicht.
    Aber ein Blick in die Hilfe verriet, dass es sich bei .Net-Controls um eine interne Bezeichnung handelt die man auch verwenden kann.

    Du willst sicher jetzt aber eher wissen wie man diesen Wert selbst auslesen kann.
    Kurzes googlen brachte mich zumindestens auf folgenden Thread: https://www.autoitscript.com/forum/topic/79…-by-their-name/

    Vielleicht findest du dort das gesuchte.

  • Im ersten Test hat das funktioniert - die Funktion "NET_DumpAllControlNames" liefert die Namen.
    Und das kann man sich dann mit [NAME: (derName)] zusammenbauen.

    Super, vielen Dank.
    Gruß Schumi