ListView auslesen

  • Hallo zusammen,

    wie kann ich eine ListView von einem ext. Programm auslesen?

    Ich möchte lediglich die letzte Zeile auslesen / auswerten.

    Hat da jemand eine Idee??

    Window Info:
    >>>> Window <<<<
    Title: Brennen
    Class: #32770
    Position: 723, 399
    Size: 474, 373
    Style: 0x94C800C4
    ExStyle: 0x00010101
    Handle: 0x00060278

    >>>> Control <<<<
    Class: SysListView32
    Instance: 1
    ClassnameNN: SysListView321
    ID: 1172
    Text: List2
    Position: 11, 8
    Size: 447, 138
    ControlClick Coords: 441, 78
    Style: 0x50210001
    ExStyle: 0x00000204
    Handle: 0x001B025C


    Danke für Eure Hilfe!

    Gruß
    Sonyman

  • Mit ControlGetHandle das Handle holen, und dann kannst du mit den _GUICtrlListview_-Funktionen arbeiten.

    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>
    $hListView = ControlGetHandle("Brennen", "", "SysListView321")
    $aText = _GUICtrlListView_GetItemTextArray($hListView, _GUICtrlListView_GetItemCount($hListView) - 1)
    _ArrayDisplay($aText)

    [/autoit]
  • Hallo SEuBo,
    dein Script funzt tadellos !
    GuiListView zeigt mir den Inhalt der letzen Zeile an.
    Jedoch ist mir nicht ganz klar wie ich jetzt weiter machen kann.

    Ich möchte den Text von ROW [2) / Col 0 auf das Wort "Fehler" hin abfragen.
    Und mit einer If.. Then Abfrage eine Aktion starten.


    Danke für deine Unterstützung!

    Gruß
    Sonyman

  • Hallo Sony:
    So?

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    $hListView = ControlGetHandle("Brennen", "", "SysListView321")
    If _GUICtrlListView_GetItemText($hListView,2,0) = "Fehler" Then
    MsgBox(16,"","Fehler")
    Else
    MsgBox(32,"","Kein Fehler")
    EndIf

    [/autoit]

    @Skorpi: _GUICtrlListview_getItemTextArray() gibt aber leider keinen 2D-Array, sondern nur einen 1D Array für den Text eines bestimmten Items + SubItems.

  • mist, dachte du hattest alles in die array gepackt... sry -.- naja könnte man ja aber auch machen ^^

    in Anlehnung an deine dezeitige SIG erst Hilfe lesen

    dann posten,

    mfg (Auto)Bert

  • also dazu muss ich jetzt noch etwas sagen: ich lese doch nicht jedes mal, wenn ich irgendeinen kommentar von mir gebe, die hilfe... ich benutze sie wirklich oft zur kontrolle, aber nicht immer... irgendwann muss man sich einmal auf seine eigenen künste erlassen können (auch wenn ich erst seid 4 oder 5 wochen autoit lerne)

  • Hallo,
    danke für die vielen schnellen Antworten!
    Das Scribt von SEuBo trift eigentlich die Sache genau, die ich umsetzen möchte.

    Ich habe es getest und es gibt nur noch eine Unklarheit.

    Den Text von ROW [2] den ich auswerten möchte zeigt:

    Fehler beim Daten schreiben. (118-0000cf20 987a9b5c)

    meine Variable $hListView hat aber den Wert : 0x001B025C

    somit kann die If.. Then..Else Abfrage nicht funktionieren.

    Wo liegt da noch der Fehler?

    Danke!

    Gruß
    Sonyman

  • Versuch doch mal mit:

    [autoit]

    ControlListView("Brennen", "", "SysListView321", "GetText", 2, 0)

    [/autoit]

    und dann mit StringInStr prüfen.

  • Hallo m-obi,
    meinst Du so?

    [autoit]

    ControlListView("Brennen", "", "SysListView321", "GetText", 2, 0)
    $location = StringInStr("GetText", "Fehler", 0, 1)
    MsgBox(16,"Info","Status"&@CRLF& $location)

    [/autoit]

    Gruß
    Sonyman

  • ne eigentlich so:

    [autoit]

    $sStatus = ControlListView("Brennen", "", "SysListView321", "GetText", 2, 0)

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

    If StringInStr($sStatus, "Fehler") Then MsgBox(16, "Info", "Status" & @CRLF & $sStatus)

    [/autoit]

    Sorry das ich mich so undeutlich ausgedrückt habe, dachte du kennst schon StringInStr ;).

  • Hallo m-obi,
    vielen Dank für deine schnelle Antwort.
    Wie Du sicher gemerkt hast ist das meine 1. ListView Abfrage.
    Die Abfrage sollte Funktionieren.
    Ich habe mir den Status von $sStatus anzeigen lassen.
    Es wird aber der " Falsche Teil" Ausgewertet.

    Wenn ich:

    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>
    $hListView = ControlGetHandle("Brennen", "", "SysListView321")
    $aText = _GUICtrlListView_GetItemTextArray($hListView, _GUICtrlListView_GetItemCount($hListView) - 1)
    _ArrayDisplay($aText)

    [/autoit]

    ausführe, dann zeigt mir List View:

    Row [1] Log-Uhrzeit
    Row [2] Statusmeldung

    Mit

    [autoit]

    $sStatus = ControlListView

    [/autoit]

    bekomme ich nur Row [1] bzw Log Uhrzeit angezeigt.

    Wie komme ich an die eigentliche Statusmeldung?


    DANKE!

    Gruß
    Sonyman

  • Hallo SonyMan,

    wenn du mit Hilfe von @m-obi 's Skript (ArrayDisplay) alles auslesen kannst, kannst du doch auch mit

    [autoit]

    if $aText[$ColNr] then ;...

    [/autoit]

    darauf reagieren, wobei hier $ColNr für die Spalte steht, die du auswerten möchtest,

    mfg (Ato)Bert

  • Hallo,
    ich habe jetzt die Abfrage wie folgt:

    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>
    $find=Inputbox("Suche","Suchwert","Fehler")
    $hListView = ControlGetHandle("Brennen", "", "SysListView321")
    $aText = _GUICtrlListView_GetItemTextArray($hListView, _GUICtrlListView_GetItemCount($hListView) - 1)
    ;_ArrayDisplay($aText)
    if $aText[2] = $find then MsgBox(16, "Suchwort gefunden",10)

    [/autoit]

    Jedoch funktioniert die If Then Abfrage von Row [2] nicht!
    (Wert ist "0")
    Status:
    ListView auslesen funktioniert perfekt!
    ArrayDisplay($aText) zeigt den gesuchten Text in
    Row[2] " Fehler beim Daten schreiben. (118-0000cf20 987a9b5c)"

    Wenn also in Row[2] das Wort "Fehler" vorkommt soll eine Aktion gestartet werden.
    Das ganze soll in einer While True Schleife eingebaut werden um den Zustand von List View
    ständig zu überwachen.

    Ich habe heute noch einige Sachen probiert, ich bekomme es aber nicht zum laufen.

    Danke für Eure Hilfe!!

    gruß
    Sonyman

  • Hallo Sonyman,

    du musst dazu StringInStr verwenden:

    [autoit]

    #include <array.au3>
    Dim $aText[3], $find = "Fehler"
    $aText[0]=3
    $aText[1]="Irgendeine Meldung"
    $aText[2]="Fehler beim Daten schreiben. (118-0000cf20 987a9b5c)"
    ArrayDisplay($aText)
    if StringInStr($aText[2],$find) then MsgBox(16, "Suchwort gefunden",$aText[2],10)

    [/autoit]

    mfg (Auto)Bert

  • Hallo AutoBert,
    die Abfrage funzt 100%ig.
    Danke!
    Jetzt bleibt mir nur noch eine Frage wie ich die ListView
    Abfrage noch einbinde.
    Das Array wird ja von der ListView Abfrage
    gespeist und ist nicht statisch.

    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>
    $find=Inputbox("Suche","Suchwert","Fehler")
    $hListView = ControlGetHandle("Brennen", "", "SysListView321")
    $aText = _GUICtrlListView_GetItemTextArray($hListView, _GUICtrlListView_GetItemCount($hListView) - 1)
    ;_ArrayDisplay($aText)
    Dim $aText[3], $find = "Fehler"
    ;$aText[0]=3
    ;$aText[1]=
    ;$aText[2]=
    ArrayDisplay($aText)
    if StringInStr($aText[2],$find) then MsgBox(16, "Suchwort gefunden",$aText[2],10)

    [/autoit]

    Sorry für die vielen Fragen, es ist mein erster Versuch und ich stehe mit dem Array noch ganz am Anfang!

    Nochmals Danke!!

  • Also das mit StringInStr hab ich dir doch schon gesagt. X(

    Also ich frage mich was daran so schwer ist.

    [autoit]

    #include <Array.au3>
    #include <GuiListView.au3>

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

    $sFind = Inputbox("Suche", "Suchwert", "Fehler")
    $hListView = ControlGetHandle("Brennen", "", "SysListView321")
    $aText = _GUICtrlListView_GetItemTextArray($hListView, _GUICtrlListView_GetItemCount($hListView) - 1)
    _ArrayDisplay($aText)
    If StringInStr($aText[2],$sFind) Then MsgBox(16, "Suchwort gefunden", $aText[2], 10)

    [/autoit]