Bezeichner und Texte auflisten

  • Hallo,

    ich möchte die Bezeichner und Texte, die sich in einem Fenster befinden auflisten. Bisher schaffe ich es nur, die einzelnen Controls eines Fensters aufzulisten:

    Code
    $classes = WinGetClassList($Titel, "")
    	While stringlen($classes) >0
    		$class = StringLeft($classes, StringInStr($classes,@lf)-1)
    		$classes = StringRight($classes, StringLen($classes)-StringLen($class)-1)
    		GUICtrlCreateListViewItem($class& " | " & ControlShow($Titel,"","Button1"), $Listview)
    	WEnd

    Ich erhalte so prima eine Auflistung aller Gui-Elemente eines Fensters mit dem Titel "$Titel", aber wie komme ich an die Texte/Bezeichner dieser Elemente?

    Danke
    Peter

  • Du musst erst die InstanzNummer noch hinzufügen. Durch WinGetClassList bekommst du nur die Klassennamen, aber nicht CLASSNAMENN, wie er zum Zugriff gebraucht wird. Also z.B.:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $Titel = "(Unbenannt"
    $classes = WinGetClassList($Titel, "")
    If StringRight($classes,1) = @Lf Then $classes = StringTrimRight($classes,1)
    $classes = StringSplit($classes,@LF)
    _ArraySort($classes,0,1)
    If $classes[0] > 0 Then
    $lastID = $classes[1]
    $z = 1
    $classes[1] &= $z
    For $i = 2 To $classes[0]
    If $lastID = $classes[$i] Then
    $z += 1
    Else
    $z = 1
    EndIf
    $lastID = $classes[$i]
    $classes[$i] &= $z
    Next
    EndIf
    ;Jetzt stimmen die Namen, fertig zum Zugriff :)

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

    ; neues Array mit ClassnameNN und ControlGetText
    Dim $text[$classes[0]+1][2]
    For $i = 1 To $classes[0]
    $text[$i][0] = $classes[$i]
    $text[$i][1] = ControlGetText($Titel,"",$classes[$i])
    Next
    _ArrayDisplay($text)

    [/autoit]
  • Danke,

    genau das habe ich gesucht.

    Nachdem ich jetzt die Lösung habe, stelle ich fest, dass sie nicht ausreicht. An viele Texte in den jeweiligen Fenstern komme ich nun heran - aber mit dieser einfachen Lösung erhalte ich eben nicht alle.
    So erhalte ich z.B. die Spaltenköpfe eine Listview so nicht.
    Muss ich nun wirklich jede Klasse gesondert behandeln (das scheint mir viel Arbeit) oder kennt jemand einen eleganteren Weg.

    Peter