AutoIT Task Manager

  • Ich bin auf die Idee gekommen (nicht als erster) mal ein Task Manager mit AutoIt zu schreiben, das Konzept hab ich schon aber da mein Grafische bzw Gui Technische Vorstellung arg beschränkt ist ob es hier jemand gibt der mir helfen will. Also einer der sich mit GUI auskennt und vl noch jemand der zb weiss wie man ein Programm einfriert.

    Mein Konzept
    1. Gui :)
    2. Treeview
    -> Prozess.exe
    -> Sichtbares Fenster
    -> Sichtbares Fenster 2.
    -> usw.
    3. Sobald man auf ein eintrag klickt bekommt man Infos über den Prozess.
    -Pfad
    -Name
    -Pirotät
    -User
    -....
    Man hat dann funktionen wie:
    - In den Vordergrund, Hintergrund, Maximieren, Minimieren, Beenden, Killen, Einfrieren (was euch noch so einfältt)

    Der Teil mit dem Daten holen ist schon so gut wie erledigt (Muss Abrfagen mit WMI raussuchen).

    Interesse? ;)

    mfg Tom

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $Tree = GUICtrlCreateTreeView(72, 56, 249, 313)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    #include <Array.au3>

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

    $o = ObjGet('winmgmts:\\localhost\root\CIMV2')

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

    $array = WinList ()

    dim $pidtowindow[UBound ($array)-1][2]
    for $i = 1 to UBound ($array) -1
    $pidtowindow[$i-1][0] = WinGetProcess ( $array[$i][1] )
    $pidtowindow[$i-1][1] = $array[$i][1]
    Next

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

    $array = ProcessList ()
    ;~ _ArrayDisplay ($array)



    for $i = 1 to UBound ($array) -1
    ConsoleWrite ($array[$i][0] & @lf)
    $cur = GUICtrlCreateTreeViewItem ( $array[$i][0], $Tree)
    ;~ ProcessGetStats ($array[$i][1])
    for $s = 0 to UBound ($pidtowindow) -1
    if $pidtowindow[$s][0] == $array[$i][1] Then
    $title = WinGetTitle ($pidtowindow[$s][1] )
    if $title <> '' and BitAND (WinGetState ( $pidtowindow[$s][1], ''),2) then
    ConsoleWrite ( "- " & $title & @lf )
    GUICtrlCreateTreeViewItem ( $title, $cur)
    EndIf
    EndIf
    Next
    Next

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Tree
    ConsoleWrite ("tree" & @lf)
    EndSwitch
    WEnd

    [/autoit]
  • Hallo,
    also da hast du dir mal was vorgenommen, wird bestimmt ein schöner Brocken Arbeit. ;)
    Zudem hab ich auch schon zwei ziemlich gute: Den ProcessMonitor und den ProcessExplorer jeweils von Sysinternals.
    Trotzdem: Viel Glück :thumbup:

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Danke, das werde ich sicherlich brauchen ;)
    Wolltest du mir jetzt nur menntal darauf vorbereiten oder ein GUI coden, ja oder xDDD

  • Willst du einafch nur Prozesse anhalten?

    Spoiler anzeigen
    [autoit]

    Func _ProcessSuspend($process)
    $processid = ProcessExists($process)
    If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll","int","NtSuspendProcess","int",$ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    Endif
    Else
    SetError(2)
    Return 0
    Endif
    EndFunc

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

    Func _ProcessResume($process)
    $processid = ProcessExists($process)
    If $processid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
    $i_sucess = DllCall("ntdll.dll","int","NtResumeProcess","int",$ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    Endif
    Else
    SetError(2)
    Return 0
    Endif
    EndFunc

    [/autoit]
  • Naja ich will schon noch kill und so einbauen aber suspend denk ich war am kompliziertesten.
    Danke Anno.
    Ich hatte eigentlich gedacht ich müsste das mit "Threadsuspend" machen.

  • yeah sieht cool aus hätte da auch schon eine idee....


    wenn du lust und laune hast würde ich mit dir zusammen arbeitn :D

  • --->

    Mein App in dieser richtung:

    Spoiler anzeigen
    [autoit]

    Opt("TrayIconHide", 1)
    Opt("WinTitleMatchMode", 3)
    Opt("GUIOnEventMode", 1)
    Opt("GUICloseOnEsc", 0)

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

    If _Singleton("Kicker Pro", 1) = 0 Then
    MsgBox(64, "Actung", "Kicker Pro wird bereits ausgeführt!", 3)
    Exit
    EndIf

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

    #include<GUIConstants.au3>
    #include<Process.au3>
    #include<Misc.au3>

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

    ; GUI
    $GUI = GuiCreate("Kicker Pro -DE", 362, 425,(@DesktopWidth-362)/2, (@DesktopHeight-425)/2)
    GUISetBkColor (0xFFFFFF)

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

    ; System Menu
    Global Const $MF_BYPOSITION = 0x0400
    Global Const $MF_SEPARATOR = 0x0800
    CreateSystemMenuItem("")
    $sysmenu = CreateSystemMenuItem("Team sl4")
    CreateSystemMenuItem("")
    Func InsertMenu($hMenu, $nPosition, $nFlags, $nIDNewItem, $lpNewItem)
    Local $nResult = DllCall("user32.dll", "int", "InsertMenu", _
    "hwnd", $hMenu, _
    "int", $nPosition, _
    "int", $nFlags, _
    "int", $nIDNewItem, _
    "str", $lpNewItem)
    Return $nResult[0]
    EndFunc
    Func CreateSystemMenuItem($sText, $hMenu = -1)
    If $hMenu = -1 Then $hMenu = GetSystemMenu($GUI)

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

    Local $nID = GUICtrlCreateDummy()
    Local $nFlags = 0

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

    If $sText = "" Then $nFlags = $MF_SEPARATOR
    $nFlags = BitOr($MF_BYPOSITION, $nFlags)

    InsertMenu($hMenu, 0xFFFFFFFF, $nFlags, $nID, $sText)
    Return $nID
    EndFunc
    Func GetSystemMenu($GUI, $bRevert = 0)
    Local $hMenu = DllCall("user32.dll", "hwnd", "GetSystemMenu", _
    "hwnd", $GUI, _
    "int", $bRevert)
    Return $hMenu[0]
    EndFunc

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

    ; List
    $list = GuiCtrlCreateList("", 30, 30, 130, 253)

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

    ; Radios
    GUISetFont(9,"","","Comic Sans MS")
    $susp = GuiCtrlCreateRadio("Einfrieren", 190, 50, 140, 20)
    $susp_close = GuiCtrlCreateRadio("Einfrieren/Schließen", 190, 80, 140, 20)
    GUICtrlSetState ($susp_close,$GUI_CHECKED)
    $resume = GuiCtrlCreateRadio("Wiederherstellen", 190, 110, 140, 20)
    $open = GuiCtrlCreateRadio("Öffnen", 190, 140, 140, 20)

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

    ; Buttons
    GUISetFont(11,"","","Comic Sans MS")
    $apply = GuiCtrlCreateButton("Bestätigen", 190, 200, 140, 30)
    $update_list = GuiCtrlCreateButton("Liste aktualisieren", 190, 240, 140, 30)

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

    ; Groups
    GuiCtrlCreateGroup("", 10, 10, 340, 290)
    GuiCtrlCreateGroup("Optionen", 180, 30, 160, 140)
    GuiCtrlCreateGroup("Auswahl", 180, 180, 160, 100)

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

    ; About Box
    GUISetFont(9,"","","Comic Sans MS")
    GuiCtrlCreateGroup("Über", 10, 310, 340, 80)
    GuiCtrlCreatePic("Pic12", 20, 330, 140, 50)
    GUICtrlCreateIcon("shell32.dll",23,20,330,100,50)
    GuiCtrlCreateLabel("© Team sl4 // http://www.team-sl4.co.cc", 140, 360)
    GUISetFont(14,"","","Comic Sans MS")
    GuiCtrlCreateLabel("by Andreas J.", 140, 330)
    GUISetFont(10,"","","Comic Sans MS")

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

    ; Trans-Slider
    $trans = GuiCtrlCreateSlider(10, 400, 340, 20)
    GUICtrlSetLimit(-1,255,1)
    GUICtrlSetData($trans,230)
    WinSetTrans($GUI,"",230)

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

    ; Set List
    $list_1 = ProcessList()
    For $i = 1 To $list_1[0][0]
    GUICtrlSetData($list, $list_1[$i][0])
    Next

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

    WinSetOnTop($GUI,"",1)
    GuiSetState()

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

    $radio = "2"

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

    ; Events
    ; Radios
    GUICtrlSetOnEvent($susp,"susp")
    GUICtrlSetOnEvent($susp_close,"susp_close")
    GUICtrlSetOnEvent($resume,"resume")
    GUICtrlSetOnEvent($open,"open")
    GUICtrlSetOnEvent($apply,"apply")
    GUICtrlSetOnEvent($sysmenu,"sysmenu")
    GUICtrlSetOnEvent($trans,"trans")
    GUICtrlSetOnEvent($update_list,"update_list")
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")

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

    ; Functions
    While 1
    If ProcessExists("explorer.exe") = 0 Then
    Run("explorer.exe")
    EndIf
    Sleep(100)
    WEnd

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

    ; Radios
    Func susp()
    $radio = "1"
    EndFunc

    Func susp_close()
    $radio = "2"
    EndFunc

    Func resume()
    $radio = "3"
    EndFunc

    Func open()
    $radio = "4"
    EndFunc

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

    Func apply()
    If $radio = "1" Then
    $SProcessName = GUICtrlRead($list)
    $Process = _MProcessSuspend($SProcessName)
    If $Process = 0 Or @error = 1 Or @error = 2 Then
    MsgBox(64, "Fehler aufgetreten", "Prozess kann nicht supsendiert werden wegen 1 der folgenden Gründen:" & @CRLF & "1.Keine Verbiendung mit kernel32.dll oder ntdll.dll" & @CRLF & "2.Prozess existiert nicht oder konnte nicht gefunden werden" & @CRLF & _
    "3.Externer Programm Fehler", 3)
    Return
    EndIf
    ElseIf $radio = "2" Then
    $SProcessName = GUICtrlRead($list)
    $Process = _MProcessSuspend($SProcessName)
    If $Process = 0 Or @error = 1 Or @error = 2 Then
    MsgBox(64, "Fehler aufgetreten", "Prozess kann nicht supsendiert werden wegen 1 der folgenden Gründen:" & @CRLF & "1.Keine Verbiendung mit kernel32.dll oder ntdll.dll" & @CRLF & "2.Prozess existiert nicht oder konnte nicht gefunden werden" & @CRLF & _
    "3.Externer Programm Fehler", 3)
    Return
    EndIf
    Sleep(500)
    ProcessClose($SProcessName,1)
    ElseIf $radio = "3" Then
    $RProcessName = GUICtrlRead($list)
    $Process = _MProcessResume($RProcessName)
    If $Process = 0 Or @error = 1 Or @error = 2 Then
    MsgBox(64, "Fehler aufgetreten", "Prozess kann nicht supsendiert werden wegen 1 der folgenden Gründen:" & @CRLF & "1.Keine Verbiendung mit kernel32.dll oder ntdll.dll" & @CRLF & "2.Prozess existiert nicht oder konnte nicht gefunden werden" & @CRLF & _
    "3.Externer Programm Fehler", 3)
    Return
    EndIf
    ElseIf $radio = "4" Then
    $openfile = FileOpenDialog("Kicker Pro","","")
    Run($openfile)
    EndIf
    EndFunc
    ; Apply

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

    Func sysmenu()
    $oIE=ObjCreate("InternetExplorer.Application.1")
    $URL = "http://www.team-sl4.co.cc/"
    $oIE.Navigate( $URL )
    EndFunc

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

    Func trans()
    WinSetTrans($GUI,"",GUICtrlRead($trans))
    EndFunc ; Trans

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

    Func update_list()
    $list_1 = ProcessList()
    For $i = 1 To $list_1[0][0]
    GUICtrlSetData($list, $list_1[$i][0])
    Next
    EndFunc ;==>Refresh

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

    Func _MProcessSuspend($SProcessName)
    $SProcessPid = ProcessExists($SProcessName)
    If $SProcessPid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $SProcessPid)
    $i_sucess = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndFunc ;==>_MProcessSuspend

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

    Func _MProcessResume($RProcessName)
    $RProcessPid = ProcessExists($RProcessName)
    If $RProcessPid Then
    $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $RProcessPid)
    $i_sucess = DllCall("ntdll.dll", "int", "NtResumeProcess", "int", $ai_Handle[0])
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
    If IsArray($i_sucess) Then
    Return 1
    Else
    SetError(1)
    Return 0
    EndIf
    Else
    SetError(2)
    Return 0
    EndIf
    EndFunc ;==>_MProcessResume

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

    Func close()
    Exit
    EndFunc

    [/autoit]