Inhalt der ListView Updaten funzt nicht!

  • Hallo schonwieder :D
    Ich habe ein problem, und zwar will ich meine ListView für meinen Taskmanager immer Updaten, aber so, dass erstmal alle Items gelöscht werden und dann werden die Prozessnamen wieder eingefügt.

    Spoiler anzeigen
    [autoit]

    Func _Update()
    Local $PList = ProcessList()
    _GUICtrlListView_DeleteAllItems($ListView1)
    _GUICtrlListView_BeginUpdate($ListView1)
    For $i = 2 To $PList[0][0]
    _GUICtrlListView_AddItem($ListView1, $PList[$i][0])
    Next
    _GUICtrlListView_EndUpdate($ListView1)
    EndFunc ;==>_Update

    [/autoit]

    Aber es werden die ganze Zeit Items hinzugefügt, obwohl ich doch

    [autoit]

    _GUICtrlListView_DeleteAllItems($ListView1)

    [/autoit]


    engefügt habe.
    Was mache ich falsch ?

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

    • Offizieller Beitrag

    Hast du das Handle oder die ControlID für die UDF Funktionen verwendet? Wenn zweites versuch mal das Handle. Das bekommst du mit GuiCtrlGetHandle. Aus deinem Codeschnipsel kann man das nicht ersehen. Schöner wäre sowieso nicht alle Items zu löschen, sondern nur zu aktualisieren. Schau mal bei meiem Taskmanager nach, da wird die Prozessliste auch nur aktualisiert.
    Wenn du willst kann ich das auch für dich einbauen, gib mir nur Bescheid.

    • Offizieller Beitrag

    Habe deinen Code mal angepaßt und aufgeräumt.

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

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

    If Not FileExists(@ScriptDir & "\settings.ini") Then
    $hotkey = InputBox("HotKey Auswahl", "Gebe deinen gewünschten HotKey ein")
    IniWrite(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", $hotkey)
    Else
    $inihotkey = IniRead(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", "")
    EndIf
    Global $Show = False
    $inihotkey = IniRead(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", ""); Diese Zeile muss nochmal geschrieben werden, damit auch beim ersten Start gelesen wird.

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

    HotKeySet($inihotkey, "GuiShow")
    HotKeySet("{ESC}", "_exit")
    ;Gui wird erstellt

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

    $gui = GUICreate("TaskManager Light", 226, 522, -3, 1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS))
    Global $MenuItem1 = GUICtrlCreateMenu("Menü")
    Global $MenuItem2 = GUICtrlCreateMenuItem("Prozess Schließen", $MenuItem1)
    Global $ListView1 = GUICtrlCreateListView("", 0, 40, 218, 448, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES))
    Global $hListview = GUICtrlGetHandle($ListView1); Handle des Listviews
    _GUICtrlListView_InsertColumn($hListview, 0, "Prozesse", 200)
    GUISetState(@SW_HIDE);Gui verstecken
    _ShowActiveProcesses($ListView1)

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

    Func GuiShow()
    $Show = True
    GUISetState(@SW_SHOW, $gui)
    EndFunc ;==>GuiShow

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $MenuItem2
    _ProcessKill()
    EndSwitch
    If $Show = True then _LifeprozessUpdate(); Update wird nur ausgeführt wenn Gui sichtbar
    WEnd

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

    Func _ShowActiveProcesses($id)
    $lst = ProcessList()
    For $i = 1 To $lst[0][0]
    GUICtrlCreateListViewItem($lst[$i][0], $id)
    Next
    EndFunc ;==>_ShowActiveProcesses

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

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

    Func _ProcessKill()
    $LVItemCount = _GUICtrlListView_GetItemCount($hListview)
    For $i = $LVItemCount To 0 Step -1
    $LVItemGetChecked = _GUICtrlListView_GetItemChecked($hListview, $i)
    If $LVItemGetChecked = True Then
    $PIDName = _GUICtrlListView_GetItemText($hListview, $i)
    ProcessClose($PIDName)
    _GUICtrlListView_DeleteItem($hListview, $i)
    EndIf
    Next
    EndFunc ;==>_ProcessKill

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

    Func _LifeprozessUpdate(); Prog by Raupi
    Local $neueProzesse = ProcessList()
    Local $NeueProzesseTemp[1]
    Local $alteprozesse = _alteprozesse()
    Local $ArraySearch
    If $neueProzesse[0][0] = Ubound($alteprozesse) Then Return; Wenn Anzahl der Alten Prozesse gleich Anzahl der neuen Prozesse dann Abbruch Update
    For $i = 1 To $neueProzesse[0][0]
    $ArraySearch = _ArraySearch($alteprozesse, $neueProzesse[$i][0])
    If @error Then
    _GUICtrlListView_AddItem($hListView, $neueProzesse[$i][0], _GUICtrlListView_GetItemCount($hListView))
    EndIf
    _ArrayAdd($NeueProzesseTemp, $neueProzesse[$i][0])
    Next
    $NeueProzesseTemp[0] = UBound($NeueProzesseTemp) - 1
    For $i = 1 To $alteprozesse[0]
    _ArraySearch($NeueProzesseTemp, $alteprozesse[$i])
    If @error Then
    $ArraySearch = _ArraySearch($alteprozesse, $alteprozesse[$i])
    _GUICtrlListView_DeleteItem($hListView, $ArraySearch - 1)
    EndIf
    Next
    EndFunc ;==>_LifeprozessUpdate

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

    Func _alteprozesse(); Prog by Raupi
    Local $ItemAnzahl1 = _GUICtrlListView_GetItemCount($hListView)
    Local $prozessListe[$ItemAnzahl1 + 1]
    $prozessListe[0] = $ItemAnzahl1;
    For $i = 1 To $ItemAnzahl1
    $prozessListe[$i] = _GUICtrlListView_GetItemText($hListView, $i - 1, 0)
    Next
    Return $prozessListe;
    EndFunc ;==>_alteprozesse

    [/autoit]


    Teste das Ganze mal aus, sollte so funktionieren.
    Eventuell könntest du die Updatefunktion noch mit AdlibEnable Zeitlich begrenzen, damit nicht dauernd die Funktion aufgerufen wird.
    Achso, hatte ich fast vergessen. Wenn du z.B. den Hotkey F3 verwenden willst muß dieser in {} stehen.