• Hallo alle miteinander.
    Ich habe mir ein kleines Programm geschrieben, welches schnelleren zugriff auf einen selbstgemachten Taskmanager verschafft.
    Per knopfdruck lassen sich die Prozesse updaten, und was der Windows Taskmanager nicht kann, kann meiner.
    Man kann nämlich mehrere Prozesse gleichzeitig beenden.
    Einfach per Checkbox auswählen und vom Menü aus löschen.
    Da man nicht einfach ausversehen löschen kann, habe ich keine Abfrage erstellt, die einen fragt ob man diesem Prozess beenden möchte.
    Die größe des Fensters ist nun veränderbar auf wunsch eines Users.
    Ich hoffe euch gefällt das Script.
    Bisher habe ich keine Bugs gefunden, wenn ihr welche findet, einfach posten ;)
    Viel Spass noch!

    Update:
    Man kann nun den HotKey auswählen und durch eine .ini verändern.
    Update by Raupi(Danke das du die Kontinuierliche Updatefunktion eingebaut hast)
    ListView Scrollbar
    Weniger CPU Auslastung

  • 1. TAB als Hotkey ist nicht grad optimal, da man die Taste ja schon mal öfters evtl braucht.
    2. Bei mir is die Liste so lang, dass ich das untere Ende des GUI nicht mehr sehen kann ;)

  • Oh da hat ich nit dran gedacht :rolleyes: Aber is trotzdem irgendwie unpraktisch, wenn man so ein riesiges Fenster da hat, mach doch die größe veränderbar...

  • 1. Es macht den anschein, dass geschützte Prozesse (Antivir / Systemprozesse) geschlossen werden können. Natürlich geht das nicht. Eine @error abfrage wäre da mit sicherheit ganz hilfreich. Vor allem da der prozess trotzdem aus der Liste entfernt wird.

    2. Ich vermisse die Übersicht, wieviele Prozesse laufen, wieviel Ram benutzt wird, eine anzeige der CPU auslastungen.. halt alles was ein richtiger Task manager können sollte.

    3. TAB ist wirklich sehr suboptimal als shortcut gewählt

    4. Die Prozesse sollten sich in Echtzeit updaten. Bevor ich mir nämlich die Zeit nehme bei deinem "schlanken" Taskmanager auf Prozesse updaten zu klicken, hab ich den normalen Taskmanager schon 3 mal offen.

    5. Prozesse sollten sich sortieren lassen.

    6. der Taskmanager sollte nicht sofort in seiner "vollen" größe auftreten. Bei mir nimmt er, bedingt durch die vielen prozesse, die komplette Bildschirmhöhe ein. Zwar kann man ihn jetzt belibig vergrößern/verkleinern. Doch trotzdem finde ich das , vor allem für den Start nicht optimal gelöst.

    • Offizieller Beitrag

    Ich finde die Hotkeybelegung auch ein wenig missglückt. Dein Menü könntest du auch noch durch ein ContextMenü ergänzen. Dann kann man schneller auf die Prozesse zugreifen. Im Augenblick ist das aber noch kein Taskmanager sondern höchstens ein Prozessschließer. Aber ich will dein Programm nicht ganz runtermachen. ;) Bin mal gespannt wie es weitergeht.

    Edit: Ich habe auch mal mit einem Taskmanager angefangen, aber im Augenblick keinen Antrieb weiterzumachen. Kannst ihn dir ja mal anschauen Er ist da ,AutoIt Taskmanager 1,6. Solltest du etwas aus dem Code gebrauchen können, tu dir keinen Zwang an. Kannst alles daraus verwenden.

  • Hi!

    Hier dein etwas veränderte Code damit es auch zum Scrollen geht!
    Wenn du den Balken nicht sehen willst dann must du halt wieder die GUICtrlCreateListView etwas vergrößern.
    Bei deinem Script hast du die GUI in der Funktion erstellt und wieder glöscht.
    Mit @SW_HIDDE und @SW_SHOW kannst du sie aus und einblenden und musst sie nicht jedesmal erstellen und löschen lassen.

    LG
    Concara

    Spoiler anzeigen
    [autoit]


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

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

    If Not FileExists(@ScriptDir & "\settings.ini") Then
    $hotkey = InputBox("HotKey Auswahl", "Gebe deinen gewünschten HotKey ein", "t"," M1"); Default Hotkey ist t " M1" man muss was eingeben kann aber nur einen Buchstaben eintragen
    If $hotkey = "" Then Exit ; Wenn jemand auf Abbrechen klickt wird das Script beendet
    IniWrite(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", $hotkey)
    Else
    $inihotkey = IniRead(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", "")
    EndIf

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

    $inihotkey = IniRead(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", "")

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

    HotKeySet($inihotkey, "_TabList")
    HotKeySet("{ESC}", "_exit")
    Global $gui = GUICreate("TaskManager Light", 205, 400, -3, 1, $WS_OVERLAPPEDWINDOW)
    ;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));
    ;Warum du das alles an deine GUICreate gehängt hast weiß ich nicht!? Ich würde erst dann was eintragen wenn du es wirklich brauchst.
    Global $on = True
    Global $MenuItem1 = GUICtrlCreateMenu("Menü")
    Global $MenuItem2 = GUICtrlCreateMenuItem("Prozess Schließen", $MenuItem1)
    Global $MenuItem3 = GUICtrlCreateMenuItem("Prozesse Updaten", $MenuItem1)
    Global $ListView1 = GUICtrlCreateListView("Prozesse", 0, 0, 200, 380, -1, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES))
    GUICtrlSetResizing (-1,$GUI_DOCKBOTTOM)
    _ShowActiveProcesses($ListView1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $MenuItem2
    _ProcessKill()
    Case $MenuItem3
    _ShowActiveProcesses($ListView1)
    EndSwitch
    WEnd

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

    Func _TabList()
    If $on = True Then
    _ShowActiveProcesses($ListView1)
    GUICtrlSendMsg($ListView1, $LVM_SETCOLUMNWIDTH, 0, -1)
    GUISetState(@SW_SHOW)
    $on = False
    ElseIf $on = False Then
    GUISetState(@SW_HIDE)
    $on = True
    EndIf
    EndFunc

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

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

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

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

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

    Func _exit()
    Exit
    EndFunc

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

    ;Diese Funktion müßtest du dir noch genauer überlegen!
    ;z.b. "alte Processliste" "neue Processliste" "dein Liste nach dem Vergleich"
    ; aaa.exe aaa.exe kein unterschied also aaa.exe
    ; aaa.exe bbb.exe unterscheid also wird ein item angehängt aaa.exe
    ; bbb.exe ccc.exe unterscheid also wird ein item angehängt bbbexe
    ; bbb.exe ddd.exe unterscheid also wird ein item angehängt bbb.exe
    ; ccc.exe ccc.exe
    ; ddd.exe ddd.exe
    ; bbb.exe
    ; ccc.exe
    ; ddd.exe

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

    ;~ Func _Update($id)
    ;~ Local $lst = ProcessList()
    ;~ For $i = 1 To $lst[0][0]
    ;~ $PIDExists = _GUICtrlListView_GetItemText($ListView1, $i-1)
    ;~ If $PIDExists <> $lst[$i][0] Then
    ;~ GUICtrlCreateListViewItem($lst[$i][0], $id)
    ;~ EndIf
    ;~ Next
    ;~ EndFunc

    [/autoit]

    If not :?: then ?( else :thumbup:

  • Hey!


    Ich habe deine code umgeschrieben wenn du erlaubst!

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)
    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))
    GUISetOnEvent(-3, '_Ende')
    Global $MenuItem1 = GUICtrlCreateMenu("Menü")
    Global $MenuItem2 = GUICtrlCreateMenuItem("Prozess Schließen", $MenuItem1)
    GUICtrlSetOnEvent(-1, '_Weiter')
    Global $MenuItem3 = GUICtrlCreateMenuItem("Prozesse Updaten", $MenuItem1)
    GUICtrlSetOnEvent(-1, '_Weiter')
    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 * Sleep(500)
    If $Show = True then _LifeprozessUpdate(); Update wird nur ausgeführt wenn Gui sichtbar
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _Weiter()
    Switch @GUI_CtrlId
    Case $MenuItem2
    _ProcessKill()
    Case $MenuItem3
    _LifeprozessUpdate()
    EndSwitch
    EndFunc

    [/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 = 2 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]

    Lg Kleiner