ProcessKiller

  • MOIN

    Ich habe mich nun extra auf diesem Forum angemeldet in der Hoffnung jemand könnt mir bei meinem Problem helfen.

    Ich versuche einen "ProcessKiller" zu schreiben. Das Probelm ist ich kann nämlich mit dem Befehl "Guictrlread" nur einen der markierten Einträge aus einem "ListView" auslesen.

    Da mein Programm aber auch mehere Prozesse beenden soll würde ich es gerne so machen dass alle markierten Prozesse geschlossen werden, die Liste an sich aber unverändert bleibt.

    Hier mein Skript:

  • Hallo Host-is-Gaming,

    wenn ich dirch richtig verstanden habe willst du wissen wie man mehrere LV-Einträge hintereinander abarbeitet. Anhand dieses Beispiels kannst du es erkennen:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 357, 366, 192, 124)
    $ListView = GUICtrlCreateListView(" |Hi|Moin|xD", 0, 0, 353, 335, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    $CheckIt = GUICtrlCreateButton("&Check", 120, 340, 113)
    For $i = 1 To 99
    GUICtrlCreateListViewItem("|" & $i & "| aaaaaaaaaaaaaa|" & Random(0,10,1), $ListView)
    ;Achtung 1. Splte ht keinen Inhalt (nur CheckBox)
    Next

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckIt
    For $i = 0 To _GUICtrlListView_GetItemCount($ListView) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($ListView, $i) Then ; wenn geChecked (angehakt) dann
    ;_GUICtrlListView_GetItemSelected ;wenn markiert
    $aItemText = _GUICtrlListView_GetItemTextArray($ListView, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Checked oder Unchecked (wir haben aber nur geChecked also keine Auswertung erforderlich)
    ;$aItemText[2] Hi
    ;$aItemText[3] Moin
    ;$aItemText{4]xD
    ConsoleWrite($aItemText[2] & " " & $aItemText[3] & @TAB & $aItemText[4] & @CRLF)
    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($ListView, $i)
    Sleep(Random(750, 1750, 1))
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    Da du nur 1 Spalte benutzt kannst du auch _GUICtrlListView_GetItemText verwenden und brauchst nicht den Weg über _GUICtrlListView_GetItemTextArray zu nehmen.

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (28. Oktober 2012 um 17:21)

  • Wenn ich das richtig verstanden habe soll ich jeden Eintrag überprüfen lassen, ob er Markiert wurde.

    Und ihn dann in ein Array schreiben sodass der "ProcessClose" Befehl seine Arbeit tun kann. :D

    Ich hoffe ich hab das jetzt richtig verstanden auch wenn ich diesen (ich sag mal) Befehl "#Region" nicht verstehe.


    Dann sag ich danke und Entschuldigung für meine Unwissenheit.

  • Wenn du anhnd der Markerung brbeiten willst geht es sogr noch etws schneller da nicht alle Einträge der LV überprüft werden müssem:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 357, 366, 192, 124)
    $ListView = GUICtrlCreateListView("Hi|Moin|xD", 0, 0, 353, 335, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT), $LVS_EX_FULLROWSELECT) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report
    $CheckIt = GUICtrlCreateButton("&Check", 120, 340, 113)
    For $i = 1 To 99
    GUICtrlCreateListViewItem($i & "| aaaaaaaaaaaaaa|" & Random(0, 10, 1), $ListView)
    ;Achtung 1. Splte ht keinen Inhalt (nur CheckBox)
    Next
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckIt
    $aSelected = _GUICtrlListView_GetSelectedIndices($ListView, True) ;alle markierten in Array übergeben
    ;_ArrayDisplay($aSelected)
    For $i = 1 To $aSelected[0] ;durch alle markierten wandern
    ;Schleifenbeginn da Element 0 die Anzahl enhält von 1 bis Anzahl
    $aItemText = _GUICtrlListView_GetItemTextArray($ListView, $aSelected[$i])
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1] Hi
    ;$aItemText[2] Moin
    ;$aItemText{3]xD
    ConsoleWrite($aItemText[1] & " " & $aItemText[2] & @TAB & $aItemText[3] & @CRLF)
    ;Spalten in der Console ausgeben
    _GUICtrlListView_EnsureVisible($ListView, $i)
    ; Automatisch an die Stelle hinscrollen
    Sleep(Random(750, 1750, 1))
    Next
    EndSwitch
    WEnd

    [/autoit]

    #Region ... #EndRegion ist eine Anweisumg für Scite damit die eingeschlossene Region auseinander bzw. zusammengefaltet werden kann. Zu den dir bisher unbekannten Befehlen solltest du auch die Hilfe mit Beispiel lesen.

    mfg autoBert