Prozess Explorer

  • Hier noch so ein Ding aus meiner Internetlosen Zeit. Ein Prozess Explorer ähnlich dem vom Windows. Er zeigt alle Prozesse an die im Moment laufen. Dazu kann man diese dann auch noch beenden. Und die besonderheit hingegen zum Windows Tastmanager - man kann Prozesse auch suchen. Ich persönlich hatte mich nämlich bei manchen Prozessen gefragt --> Was ist das? Und WO kommt das her.
    Das ganze wäre aber zu einfach wenn es ohne probleme funtionieren würde. Da ich ja kein Internet hatte habe ich mir die Suchfunktion selbst gebastelt und als UDF gespeichert. Naja diese Suchfunktion lässt nur einige Verzeichnisse aus >_<. Und auch beim beenden von Prozessen gibts Probleme. Mein Prozess-Explorer kann nicht alle Prozesse beenden die der Windows Taskmanager beenden kann...

    hier erstmal die Scripte:

    Der Explorer:

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.2.0
    Author: akira2012

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <array.au3>
    #include <file.au3>
    #include <GUIConstants.au3>
    #include <GuiList.au3>
    #include <Process.au3>
    #include <guicombo.au3>
    #include <search.au3>

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

    dim $test[10]

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

    ;$Festplatten=DriveGetDrive("FIXED")
    ;_ArrayDisplay($Festplatten, "")
    $PEX=GUICreate("Prozess Explorer", 330, 400)
    $beenden=GUICtrlCreateButton("Beenden", 10, 300, 90)
    $killprocess=GUICtrlCreateButton("Kill Process", 120, 300, 90)
    $Anzeige=GUICtrlCreateProgress(10, 350, 200)
    $prioritaet=GUICtrlCreateButton("Priorität auslesen", 230, 300, 90)
    $test=ProcessList()

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

    if $test[0][0] > 20 then
    $hoch = 240
    Else
    $hoch = $test[0][0] * 10
    EndIf
    $Auflistung=GUICtrlCreateList("", 10, 10, 150, $hoch)
    _GUICtrlListClear($Auflistung)
    for $i = 1 to $test[0][0]
    IF $test[$i][0] = "[System Process]" Then
    Else
    _GUICtrlListAddItem($Auflistung, $test[$i][0])
    EndIf
    Next

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

    $priochange=GUICtrlCreatebutton("Priorität ändern", 230, 350, 90)

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

    $priochange2=GUICtrlCreateCombo("", 230, 10)
    _GUICtrlComboAddString( $priochange2, "Gering")
    _GUICtrlComboAddString( $priochange2, "Unter Normal")
    _GUICtrlComboAddString( $priochange2, "Normal")
    _GUICtrlComboAddString( $priochange2, "Über Normal")
    _GUICtrlComboAddString( $priochange2, "Hoch")
    _GUICtrlComboAddString( $priochange2, "Echtzeit")
    $aendern=GUICtrlCreateButton("Ändern", 230, 50, 90)
    GUICtrlSetState($priochange2, $gui_hide)
    GUICtrlSetState($aendern, $gui_hide)

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

    $suchen=GUICtrlCreateButton("Prozess Suchen", 230, 250, 90)

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

    GUISetState(@sw_show)

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

    While 1
    $msg = GUIGetMsg()

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

    Select

    case $msg = $beenden
    Exit


    case $msg = $suchen

    $suche=GUICtrlRead($Auflistung)
    _search($suche, "C:\")

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

    case $msg = $Prioritaet

    $Failure=-1
    $Idle=0
    $BelowNormal=1
    $Normal=2
    $AboveNormal=3
    $High=4
    $Realtime=5
    $prozess=GUICtrlRead($Auflistung)
    for $i = 1 to $test[0][0]
    $prio=_ProcessGetPriority($test[$i][1])
    IniWrite("prio.ini", "Prozess", $test[$i][0], $prio)
    Next
    $ausgabe=IniRead("prio.ini", "Prozess", $prozess, "")
    If $ausgabe=$Failure Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ist nicht bekannt")
    ElseIf $ausgabe=$Idle Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ist ""niedrig"".")
    ElseIf $ausgabe=$BelowNormal Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ist ""unter Normal"".")
    ElseIf $ausgabe=$Normal Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ist ""Normal"".")
    ElseIf $ausgabe=$AboveNormal Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ist ""Über Normal"".")
    ElseIf $ausgabe=$High Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ist ""Hoch"".")
    ElseIf $ausgabe=$Realtime Then
    beep (500, 100)
    MsgBox(0, "", "Die Priorität des Prozesses """&$prozess&""" ""Echtzeit"".")
    EndIf
    IniDelete("prio.ini", "Prozess")

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

    case $msg = $priochange
    GUICtrlSetState($priochange2, $gui_show)
    GUICtrlSetState($aendern, $gui_show)

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

    case $msg=$aendern
    $prozess=GUICtrlRead($Auflistung)
    $ergebnis=GUICtrlRead($priochange2)
    if $ergebnis="Gering" Then
    ProcessSetPriority($prozess, $idle)
    IF _ProcessGetPriority($prozess) = 0 Then
    beep (500, 100)
    MsgBox(0, "Info", "Der Prozess hat jetzt die Priorität ""Gering""")
    Else
    beep (500, 100)
    MsgBox(0, "Fehler", "Die Priorität des Prozesses kann nicht geändert werden!")

    EndIf

    ElseIf $ergebnis="Unter normal" Then
    ProcessSetPriority($prozess, $BelowNormal)
    IF _ProcessGetPriority($prozess) = 1 Then
    beep (500, 100)
    MsgBox(0, "Info", "Der Prozess hat jetzt die Priorität ""Unter Normal""")
    Else
    beep (500, 100)
    MsgBox(0, "Fehler", "Die Priorität des Prozesses kann nicht geändert werden!")
    EndIf
    ElseIf $ergebnis="Normal" Then
    ProcessSetPriority($prozess, $Normal)
    IF _ProcessGetPriority($prozess) = 2 Then
    beep (500, 100)
    MsgBox(0, "Info", "Der Prozess hat jetzt die Priorität ""Normal""")
    Else
    beep (500, 100)
    MsgBox(0, "Fehler", "Die Priorität des Prozesses kann nicht geändert werden!")
    EndIf
    ElseIf $ergebnis="Über normal" Then
    ProcessSetPriority($prozess, $AboveNormal)
    IF _ProcessGetPriority($prozess) = 3 Then
    beep (500, 100)
    MsgBox(0, "Info", "Der Prozess hat jetzt die Priorität ""Über Normal""")
    Else
    beep (500, 100)
    MsgBox(0, "Fehler", "Die Priorität des Prozesses kann nicht geändert werden!")
    EndIf
    ElseIf $ergebnis="Hoch" Then
    ProcessSetPriority($prozess, $High)
    IF _ProcessGetPriority($prozess) = 4 Then
    beep (500, 100)
    MsgBox(0, "Info", "Der Prozess hat jetzt die Priorität ""Hoch""")
    Else
    beep (500, 100)
    MsgBox(0, "Fehler", "Die Priorität des Prozesses kann nicht geändert werden!")
    EndIf
    ElseIf $ergebnis="Echtzeit" Then
    ProcessSetPriority($prozess, $Realtime)
    IF _ProcessGetPriority($prozess) = 5 Then
    beep (500, 100)
    MsgBox(0, "Info", "Der Prozess hat jetzt die Priorität ""Echtzeit""")
    Else
    beep (500, 100)
    MsgBox(0, "Fehler", "Die Priorität des Prozesses kann nicht geändert werden!")
    EndIf
    EndIf


    case $msg = $killprocess
    $prozess=GUICtrlRead($Auflistung)
    ProcessClose($prozess)

    $i=0
    $label=GUICtrlCreateLabel("Prozess wird beended...", 10, 330)
    Do
    $i=$i+1
    GUICtrlSetData($anzeige, $i)
    sleep(100)
    until not ProcessExists($prozess) OR $i = 100

    IF Not ProcessExists($prozess) THEN
    $i=100
    GUICtrlSetData($anzeige, $i)
    GUICtrlDelete($label)
    $label=GUICtrlCreateLabel("Prozess beended!", 10, 330)
    beep (500, 100)
    MsgBox(0, "Beenden erfolgreich", "Der Prozess wurde erfolgreich beended")
    Else
    GUICtrlDelete($label)
    $label=GUICtrlCreateLabel("Prozess beenden fehlgeschlagen!", 10, 330)
    beep (500, 100)
    MsgBox(0, "Beenden fehlgeschlagen", "Beenden fehlgeschlagen! Der Prozess lässt sich nicht beenden.")
    EndIf
    $i = 0
    GUICtrlSetData($anzeige, $i)

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

    _GUICtrlListClear($Auflistung)
    for $i = 1 to $test[0][0]
    IF $test[$i][0] = "[System Process]" Then
    Else
    _GUICtrlListAddItem($Auflistung, $test[$i][0])
    EndIf
    Next

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

    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop

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

    EndSelect
    WEnd

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

    #cs

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

    #ce

    [/autoit]


    Und hier die Suchfunktion -_-*

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    #include <file.au3>
    func _search($Eingabe, $Laufwerk)
    ;$Eingabe = "*.au3"
    ;$Laufwerk = "C:\"

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

    ;Suche im Rootverzeichniss
    $Verzeichnisse=_FileListToArray($Laufwerk, "*", 2)
    FOR $i = 1 to $Verzeichnisse[0]
    FileChangeDir($Laufwerk & $Verzeichnisse[$i])
    $Suche = FileFindFirstFile($Eingabe)
    While 1
    $file = FileFindNextFile($Suche)
    If @error Then ExitLoop
    MsgBox(4096, "File:", @workingdir &"\"& $file)
    WEnd
    FileClose($Suche)

    Next

    ;Suche im 2. Verzeichniss
    $Verzeichnisse=_FileListToArray($Laufwerk, "*", 2)
    FOR $i = 1 to $Verzeichnisse[0]
    FileChangeDir($Laufwerk & $Verzeichnisse[$i])
    $Aktuell = @WorkingDir
    ;MsgBox(0, "", @Workingdir)
    $Verzeichnisse2=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $o = 1 to $Verzeichnisse2[0]
    FileChangeDir($Aktuell&"\"&$Verzeichnisse2[$o])
    ;MsgBox(0, "", $Aktuell&"\"&$Verzeichnisse2[$o])
    $Suche = FileFindFirstFile($Eingabe)
    While 1
    $file = FileFindNextFile($Suche)
    If @error Then ExitLoop
    MsgBox(4096, "File:", @workingdir &"\"& $file)
    WEnd
    Next
    EndIf
    FileClose($Suche)
    Next


    ;Suche im 3.Verzeichniss
    $Verzeichnisse=_FileListToArray($Laufwerk, "*", 2)
    FOR $i = 1 to $Verzeichnisse[0]
    FileChangeDir($Laufwerk & $Verzeichnisse[$i])
    $Aktuell = @WorkingDir

    $Verzeichnisse2=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 OR @ERROR = 1 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $o = 1 to $Verzeichnisse2[0]
    FileChangeDir($Aktuell&"\"&$Verzeichnisse2[$o])
    $Aktuell = @Workingdir

    ;_ArrayDisplay($Verzeichnisse2, $Aktuell)
    $Verzeichnisse3=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 OR @ERROR = 1 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $p = 1 to $Verzeichnisse3[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse3[$p])

    $Suche = FileFindFirstFile($Eingabe)
    While 1
    $file = FileFindNextFile($Suche)
    If @error Then ExitLoop
    MsgBox(4096, "File:", @workingdir &"\"& $file)
    WEnd
    Next
    EndIf
    Next
    EndIf
    FileClose($Suche)
    Next


    ;Suche im 4. Verzeichniss
    $Verzeichnisse=_FileListToArray($Laufwerk, "*", 2)
    FOR $i = 1 to $Verzeichnisse[0]
    FileChangeDir($Laufwerk & $Verzeichnisse[$i])
    $Aktuell = @WorkingDir
    ;MsgBox(0, "", @Workingdir)
    $Verzeichnisse2=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $o = 1 to $Verzeichnisse2[0]
    FileChangeDir($Aktuell&"\"&$Verzeichnisse2[$o])
    $Aktuell = @Workingdir
    $Verzeichnisse3=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $p = 1 to $Verzeichnisse3[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse3[$p])
    $Aktuell = @Workingdir
    $Verzeichnisse4=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $u = 1 to $Verzeichnisse4[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse4[$u])
    $Suche = FileFindFirstFile($Eingabe)
    While 1
    $file = FileFindNextFile($Suche)
    If @error Then ExitLoop
    MsgBox(4096, "File:", @workingdir &"\"& $file)
    WEnd
    Next
    EndIf
    Next
    EndIf
    Next
    EndIf
    FileClose($Suche)
    Next

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

    ;Suche im 5. Verzeichniss
    $Verzeichnisse=_FileListToArray($Laufwerk, "*", 2)
    FOR $i = 1 to $Verzeichnisse[0]
    FileChangeDir($Laufwerk & $Verzeichnisse[$i])
    $Aktuell = @WorkingDir
    ;MsgBox(0, "", @Workingdir)
    $Verzeichnisse2=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $o = 1 to $Verzeichnisse2[0]
    FileChangeDir($Aktuell&"\"&$Verzeichnisse2[$o])
    $Aktuell = @Workingdir
    $Verzeichnisse3=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $p = 1 to $Verzeichnisse3[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse3[$p])
    $Aktuell = @Workingdir
    $Verzeichnisse4=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $u = 1 to $Verzeichnisse4[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse4[$u])
    $Aktuell = @Workingdir
    $Verzeichnisse5=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    For $t = 1 to $Verzeichnisse5[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse5[$t])
    $Suche = FileFindFirstFile($Eingabe)
    While 1
    $file = FileFindNextFile($Suche)
    If @error Then ExitLoop
    MsgBox(4096, "File:", @workingdir &"\"& $file)
    WEnd
    Next
    EndIf
    Next
    EndIf
    Next
    EndIf
    Next
    EndIf
    FileClose($Suche)
    Next


    ;Suche im 6. Verzeichniss
    $Verzeichnisse=_FileListToArray($Laufwerk, "*", 2)
    FOR $i = 1 to $Verzeichnisse[0]
    FileChangeDir($Laufwerk & $Verzeichnisse[$i])
    $Aktuell = @WorkingDir
    ;MsgBox(0, "", @Workingdir)
    $Verzeichnisse2=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $o = 1 to $Verzeichnisse2[0]
    FileChangeDir($Aktuell&"\"&$Verzeichnisse2[$o])
    $Aktuell = @Workingdir
    $Verzeichnisse3=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $p = 1 to $Verzeichnisse3[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse3[$p])
    $Aktuell = @Workingdir
    $Verzeichnisse4=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    FOR $c = 1 to $Verzeichnisse4[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse4[$c])
    $Aktuell = @Workingdir
    $Verzeichnisse5=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    For $r = 1 to $Verzeichnisse5[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse5[$r])
    $Aktuell = @Workingdir
    $Verzeichnisse6=_FileListToArray($Aktuell, "*", 2)
    IF @Error = 4 then
    ;MsgBox(0, "", "Der Ordner "&$Aktuell&" hat keine Unterordner")
    Else
    For $g = 1 to $Verzeichnisse6[0]
    FileChangeDir($Aktuell &"\"& $Verzeichnisse6[$g])
    $Suche = FileFindFirstFile($Eingabe)
    While 1
    $file = FileFindNextFile($Suche)
    If @error Then ExitLoop
    MsgBox(4096, "File:", @workingdir &"\"& $file)
    WEnd
    Next
    EndIf
    Next
    EndIf
    Next
    EndIf
    Next
    EndIf
    Next
    EndIf
    FileClose($Suche)
    Next

    EndFunc

    [/autoit]


    Ich werde das ganze sicher mal überarbeiten und die eigene Suchfunktion vielleicht ersetzen aber wollte erstmal hören was ihr dazu denkt ^^

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    Einmal editiert, zuletzt von akira2012 (25. Juni 2007 um 20:36)

  • Bug?

    Ich hab nichts weiteres angeklickt und einfach ma auf Prozess Suchen geklickt und wie irre Popups bekommen. Allerdings mehr Popups, als mir in der Liste angezeigten Prozesse

    Und nen Tip zu deiner search.au3 ==> Funktionen ;)

  • irgendwie passt da was nicht beim Suchen - kann das von snoopy nur bestätigen kann es sein, dass er beim auslesen der Liste irgendwie mehrere zurückbekommt oder wie 8|

  • Lol. Sry das ist die eine Version bei der ich auf Fehlersuche war ich Update das jetzt mal - schaut in 10 min nochmal nach ^^ (peinlichpeinlich)


    EDIT: Ok die Suchfunktion wurde berichtigt und ist oben zu holen ^^

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    Einmal editiert, zuletzt von akira2012 (25. Juni 2007 um 20:36)

  • Kann es sein, dass er nur den Pfad der Prozesse anzeigt, die sich auf C:\ befinden. Habe mIRC oder ICQ z.B. auf D:\ installiert und wenn ich sie anwähle und dann auf Suchen klicke, zeigt er mir nichts an. Kann natürlich sein, dass ich ziehmlich ungeduldig bin und dass er ziehmlich lang braucht,um den Pfad zu finden.

  • Ja das ist richtig und ich wollte das auch noch ändern und weiß auch wie ich das machen muß aber bevor ich den Bug in meiner Suchfunktion nicht gefunden habe wollte ich das nicht machen...

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • 1. BUG: Die Suche durchsucht nicht alle Verzeichnisse (keine Ahnung wieso). Folge ist das nicht alle Prozesse gefunden werden.

    2. BUG: Es lassen sich nicht alle Programme beenden die mit dem Taskmanager beendet werden können. (Obwohl das glaube ich rechtebedingte Gründe von Windows aus)

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    Einmal editiert, zuletzt von akira2012 (25. Juni 2007 um 21:43)