Task_Manager v0.1

  • Hi Leute!

    Die erste Testversion vom Task Manager ist fertig, nun stelle ich ihn euch vor.
    Ich bin auf die Idee gekommen als ich den Autoit_taskmanager von Raupi gesehen habe.

    Anzeige: alle Anwendungen + beenden + starten + wechseln zu (anzeige Icon´s)
    alle Prozesse + beenden + starten
    alle Dienste + beenden + starten (wenn zugelassen)


    Update: 27.11.2010 Bug´s behoben und die CPU leistung gesenkt für den Code.

    Neu: CPU anzeige + Arbeitsspeicher
    !Bugs behoben Icon darstellung!
    Sortierung

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=ICON_385.ICO
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -I dir -w1 -w2 -w3 -w4 -w5 -w6 -v1 -v2 -v3
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Array.au3>
    #include <System.au3>
    #include <GuiTab.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <GuiStatusBar.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <ProgressConstants.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)
    Opt('WinTitleMatchMode', 3)

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

    $Debug_LV = False

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

    Global $Form[3]

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

    Global $Breite = @DesktopWidth
    Global $Hoehe = @DesktopHeight
    Global $EigenPID = @AutoItPID
    Global $Breite_K = 410
    Global $Hoehe_K = 455

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

    Global Const $WM_APPCOMMAND = 0x319
    Global Const $tagNMHDR_0 = 'hwnd hWndFrom;uint_ptr IDFrom;INT Code'
    Global Const $tagNMLISTVIEW_0 = $tagNMHDR_0 & ';int Item;int SubItem;int NewState;int OldState;int Changed;int ActionX;int ActionY;int Param'

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

    Global $Tab
    Global $WinTmp
    Global $SYS[30]
    Global $Null = 0
    Global $Menue_SYS[2], $MenuItem_0, $iIndex
    Global $aWinList, $aProcess, $aProcess_0, $Icon, $Trans = 0.2, $laenge = 400
    Global $iParts[3] = [180, 780, 50], $iStatus, $Dienste, $mem, $iGetIthm = -1, $Checkbox[4], $Label, $Set_Label, $Set_Prio
    Global $Bezeichnung_0[7][2] = [['Task', 260],['EXE', 60],['Status', 60],['PID', 40],['Handel', 100],['Pfad', 260],['Klassenname', 100]]
    Global $LV_SYS[5], $Handle_LV_SYS[5], $Index = 0, $Contextmenu[3], $Contextmenuitem_0[3], $Contextmenuitem_1[3], $Contextmenuitem_2[2], $Prio_Item[4]
    Global $Bezeichnung_1[8] = ['ProzesseName', 'PID', 'Parent PID', 'Eigentümer', 'Priorität', 'Ausführbaren Pfad', 'Geschriebenen Daten', 'Speichernutzung']
    Global $Bezeichnung_2[10] = ['Interner Name', 'PID', 'Akzeptiert Pause', 'Akzeptiert Stop', 'Pfad', 'Status', 'Zustand', 'StartMode', 'StartName', 'Beschreibung']

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

    Global Static $objRefresher = ObjCreate('WbemScripting.SWbemRefresher')
    Global Static $objRefreshableItem = $objRefresher.AddEnum(ObjGet('winmgmts:\\' & @ComputerName & '\root\CIMV2'), 'Win32_PerfFormattedData_PerfOS_Processor')

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

    $objRefresher.Refresh(0)

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

    If IsObj($objRefreshableItem) Then Global Static $aCPU[$objRefreshableItem.ObjectSet.Count]
    Global $Set_Prog = $Null, $core[UBound($aCPU) - 1], $l_core[UBound($aCPU) - 1], $P_core[UBound($aCPU) - 1]

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

    If (@OSArch = 'X86') Then $Trans = 10

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

    Switch UBound($aCPU) - 1
    Case 6
    $laenge += 150
    Case 8
    $laenge += 250
    Case 12
    $laenge += 450
    EndSwitch

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

    $Form[$Null] = GUICreate('Task_Manager v0.1', 870, 460, (@DesktopWidth - 870) / 2, (@DesktopHeight - 460) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS)
    GUISetOnEvent(-3, 'Ende')

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

    $Menue_SYS[$Null] = GUICtrlCreateMenu(' Datein ')
    $MenuItem_0 = GUICtrlCreateMenuItem(' Neuer Task ( Ausführen.... ) ', $Menue_SYS[$Null])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    GUICtrlCreateMenuItem(' Leistung ', $Menue_SYS[$Null])
    GUICtrlSetOnEvent(-1, '_CPU_Darstellung')
    GUICtrlCreateMenuItem(' Beenden ', $Menue_SYS[$Null])
    GUICtrlSetOnEvent(-1, 'Ende')

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

    $Tab = GUICtrlCreateTab(10, 8, 850, 400)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)

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

    GUICtrlCreateTabItem('Anwendungen')
    $LV_SYS[$Null] = GUICtrlCreateListView('', 25, 50, 818, 315, $LVS_SINGLESEL + $LVS_EX_DOUBLEBUFFER)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $Handle_LV_SYS[$Null] = GUICtrlGetHandle($LV_SYS[$Null])
    GUICtrlSetFont(-1, 9, 150, '', 'Calibri')

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

    $Icon = _GUIImageList_Create(16, 16, 5)
    _GUICtrlListView_SetImageList($Handle_LV_SYS[$Null], $Icon, 1)

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

    For $i = $Null To 6
    _GUICtrlListView_AddColumn($Handle_LV_SYS[$Null], $Bezeichnung_0[$i][$Null], $Bezeichnung_0[$i][1])
    Next

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

    $aWinList = StartCallback()
    If @error Then ErrorExit()
    $aProcess = New_Prozess(1, '', '')

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

    If IsArray($aProcess) Then
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[$Null])
    For $i = 1 To $aWinList[0][0]
    $iIndex = IsInArray($aProcess, $aWinList[$i][3], 1, 0, 0, 0, 1)
    If Not @error And ($aProcess[$iIndex][1] <> $EigenPID) Then
    $Index = _GUIImageList_AddIcon($Icon, $aProcess[$iIndex][2])
    _GUICtrlListView_AddItem($Handle_LV_SYS[0], $aWinList[$i][1], $Index)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $aProcess[$iIndex][$Null], 1)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, ' Wird ausgeführt ', 2)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $aWinList[$i][3], 3)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $aWinList[$i][$Null], 4)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $aProcess[$iIndex][2], 5)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $aWinList[$i][2], 6)
    EndIf
    Next
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[$Null])
    EndIf

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

    $SYS[$Null] = GUICtrlCreateButton('Task beenden', 535, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $SYS[1] = GUICtrlCreateButton('Wechseln zu', 640, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $SYS[2] = GUICtrlCreateButton('Neuer Task...', 745, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    GUICtrlCreateTabItem('Processe')
    $LV_SYS[1] = GUICtrlCreateListView('', 25, 50, 818, 315, $LVS_SINGLESEL + $LVS_EX_DOUBLEBUFFER)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $Handle_LV_SYS[1] = GUICtrlGetHandle($LV_SYS[1])
    GUICtrlSetFont(-1, 9, 150, '', 'Calibri')

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

    For $i = $Null To 7
    _GUICtrlListView_AddColumn($Handle_LV_SYS[1], $Bezeichnung_1[$i], 100)
    Next

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

    $aProcess_0 = New_Prozess(2, '', '')
    If IsArray($aProcess_0) Then
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[1])
    _GUICtrlListView_AddArray($LV_SYS[1], $aProcess_0)
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[1])
    EndIf

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

    $SYS[3] = GUICtrlCreateButton('Process beenden', 745, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    GUICtrlCreateTabItem('Dienste')
    $LV_SYS[2] = GUICtrlCreateListView('', 25, 50, 818, 315, $LVS_SINGLESEL + $LVS_EX_DOUBLEBUFFER)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $Handle_LV_SYS[2] = GUICtrlGetHandle($LV_SYS[2])
    GUICtrlSetFont(-1, 9, 150, '', 'Calibri')

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

    For $i = $Null To 9
    _GUICtrlListView_AddColumn($Handle_LV_SYS[2], $Bezeichnung_2[$i], 100)
    Next

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

    $Dienste = LA_Services(@ComputerName)
    If IsArray($Dienste) Then
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[2])
    _GUICtrlListView_AddArray($LV_SYS[2], $Dienste)
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[2])
    EndIf

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

    GUICtrlCreateTabItem('')
    $iStatus = _GUICtrlStatusBar_Create($Form[$Null])
    _GUICtrlStatusBar_SetParts($iStatus, $iParts)

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

    $Contextmenu[$Null] = GUICtrlCreateContextMenu($LV_SYS[$Null])
    $Contextmenuitem_0[$Null] = GUICtrlCreateMenuItem('Task beenden', $Contextmenu[$Null])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_0[1] = GUICtrlCreateMenuItem('Wechseln zu', $Contextmenu[$Null])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_0[2] = GUICtrlCreateMenuItem('Neuer Task...', $Contextmenu[$Null])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    $Contextmenu[1] = GUICtrlCreateContextMenu($LV_SYS[1])
    $Contextmenuitem_1[$Null] = GUICtrlCreateMenuItem('Dateipfad öffnen', $Contextmenu[1])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_1[1] = GUICtrlCreateMenuItem('Process beenden', $Contextmenu[1])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_1[2] = GUICtrlCreateMenuItem('Priorität festlegen', $Contextmenu[1])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    $Contextmenu[2] = GUICtrlCreateContextMenu($LV_SYS[2])
    $Contextmenuitem_2[$Null] = GUICtrlCreateMenuItem('Dienst starten', $Contextmenu[2])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_2[1] = GUICtrlCreateMenuItem('Dienst beenden', $Contextmenu[2])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    GUISetState()

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

    $Form[1] = GUICreate('Priorität Festlegen', 350, 180, -1, -1)
    GUISetOnEvent(-3, 'Form_HIDE')
    $Label = GUICtrlCreateLabel('', 15, 20, 320, 25, $SS_CENTER)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel('Das Ändern der Priorität bestimmter Prozesse kann zu einer Instabilität des System führen.', 15, 55, 320, 25, $SS_CENTER)
    $Checkbox[$Null] = GUICtrlCreateButton('Niedrig', 40, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Checkbox[1] = GUICtrlCreateButton('Normal', 105, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Checkbox[2] = GUICtrlCreateButton('Hoch', 185, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Checkbox[3] = GUICtrlCreateButton('Echtzeit', 250, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    GUISetState(@SW_HIDE, $Form[1])

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

    $Form[2] = GUICreate('Leistung', $laenge, 460, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)

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

    For $i = $Null To UBound($aCPU) - 2
    If $i Then $Set_Prog = 70 * $i
    $core[$i] = GUICtrlCreateProgress(50 + $Set_Prog, 65, 60, 160, $PBS_VERTICAL)
    $P_core[$i] = GUICtrlCreateLabel('', 50 + $Set_Prog, 230, 50, 20, $SS_CENTER)
    $l_core[$i] = GUICtrlCreateLabel('CPU ' & $i + 1, 50 + $Set_Prog, 45, 50, 20, $SS_CENTER)
    Next

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

    Global $Arbeitspeicher = GUICtrlCreateProgress(50, 280, 80, 140, $PBS_VERTICAL)
    Global $l_Arbeitspeicher = GUICtrlCreateLabel('Arbeitsspeicher', 40, 260, 100, 20, $SS_CENTER)
    Global $P_Arbeitspeicher = GUICtrlCreateLabel('', 50, 425, 80, 20, $SS_CENTER)
    GUICtrlCreateGroup('Physikalischer Speicher (MB)', 160, 300, 170, 110)
    GUICtrlCreateLabel('Insgesamt : ', 180, 330, 60, 19)
    Global $GesamtRAM = GUICtrlCreateInput('', 270, 330, 40, 19, $ES_READONLY + $ES_CENTER)
    GUICtrlCreateLabel('Verfügbar : ', 180, 355, 60, 19)
    Global $VerfuegbarerRAM = GUICtrlCreateInput('', 270, 355, 40, 19, $ES_READONLY + $ES_CENTER)
    GUICtrlCreateLabel('Benutzt : ', 180, 380, 60, 19)
    Global $BenutztRAM = GUICtrlCreateInput('', 270, 380, 40, 19, $ES_READONLY + $ES_CENTER)
    GUISetState(@SW_HIDE, $Form[2])

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

    AdlibRegister('Update', 1000)
    GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    GUIRegisterMsg(0x0024, 'MY_WM_GETMINMAXINFO')

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

    Func Update()
    Switch _GUICtrlTab_GetCurSel($Tab)
    Case $Null
    If WinListe_Update() Then _GUICtrlStatusBar_SetText($iStatus, ' Aktive Fenster : ' & _GUICtrlListView_GetItemCount($Handle_LV_SYS[$Null]), $Null)
    Case 1
    If Prozess_Update() Then _GUICtrlStatusBar_SetText($iStatus, ' Prozesse : ' & _GUICtrlListView_GetItemCount($Handle_LV_SYS[1]), $Null)
    Case 2
    _GUICtrlStatusBar_SetText($iStatus, ' Dienste : ' & _GUICtrlListView_GetItemCount($Handle_LV_SYS[2]), $Null)
    EndSwitch
    EndFunc ;==>Update

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

    Func WinListe_Update()
    Local $Temp[1]
    Local $iWin = StartCallback()
    If @error Then ErrorExit()
    Local $GIC_Win_A_P = GetListViewToArray($Null)
    Local $WinAlt = $GIC_Win_A_P[$Null]
    Local $WinAltPrue = $GIC_Win_A_P[1]
    If ($iWin[$Null][$Null] = UBound($GIC_Win_A_P[$Null])) Then
    For $i = $Null To $iWin[$Null][$Null]
    If (Not IsInArray($WinAlt, $iWin[$i][1])) Then Win_Alt_Prue($WinAltPrue, $iWin[$i][$Null], $iWin[$i][1])
    Next
    Return True
    EndIf
    Local $iPro = New_Prozess(1, '', '')
    If IsArray($iPro) Then
    _GUIImageList_SetImageCount($Icon, _GUICtrlListView_GetItemCount($Handle_LV_SYS[$Null]))
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[$Null])
    For $i = $Null To $iWin[$Null][$Null]
    $iIndex = IsInArray($iPro, $iWin[$i][3], 1, $Null, $Null, $Null, 1)
    If Not @error And ($iPro[$iIndex][1] <> $EigenPID) Then
    _ArrayAdd($Temp, $iWin[$i][$Null])
    If (Not IsInArray($WinAlt, $iWin[$i][1]) And Not IsInArray($WinAltPrue, $iWin[$i][$Null])) And Not StringInStr($iPro[$iIndex][$Null], 'consent.exe', 1) Then
    If Win_Alt_Prue($WinAltPrue, $iWin[$i][$Null], $iWin[$i][1]) Then ContinueLoop
    $Index = _GUIImageList_AddIcon($Icon, $iPro[$iIndex][2])
    _GUICtrlListView_AddItem($Handle_LV_SYS[$Null], $iWin[$i][1], $Index)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $iPro[$iIndex][$Null], 1)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, ' Wird ausgeführt ', 2)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $iWin[$i][3], 3)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $iWin[$i][$Null], 4)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $iPro[$iIndex][2], 5)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[$Null], $Index, $iWin[$i][2], 6)
    EndIf
    EndIf
    Next
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[$Null])
    EndIf
    If (UBound($Temp) - 2 < $WinAltPrue[$Null]) Then
    For $i = 1 To $WinAltPrue[$Null]
    If (Not IsInArray($Temp, $WinAltPrue[$i])) Then _GUICtrlListView_DeleteItem($Handle_LV_SYS[0], (IsInArray($WinAltPrue, $WinAltPrue[$i], $Null, $Null, $Null, $Null, 1) - 1))
    Next
    EndIf
    Return True
    EndFunc ;==>WinListe_Update

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

    Func Win_Alt_Prue($WAP, $HWL, $F_Text)
    For $i = 1 To $WAP[$Null]
    If ($WAP[$i] = $HWL) Then
    If _GUICtrlListView_SetItemText($Handle_LV_SYS[$Null], ($i - 1), $F_Text) Then Return True
    EndIf
    Next
    Return False
    EndFunc ;==>Win_Alt_Prue

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

    Func Prozess_Update()
    Local $Pro_New, $Temp[1]
    Local $Pro_New_List = ProcessList()
    Local $Pro_Alt = GetListViewToArray(1)
    If (UBound($Pro_Alt) - 1 = UBound($Pro_New_List) - 2) Then Return True
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[1])
    For $i = 2 To $Pro_New_List[$Null][$Null]
    If Not IsInArray($Pro_Alt, $Pro_New_List[$i][$Null]) Then
    $Pro_New = New_Prozess($Null, $Pro_New_List[$i][1], $Error)
    _GUICtrlListView_AddItem($Handle_LV_SYS[1], $Pro_New[$Null][$Null], _GUICtrlListView_GetItemCount($Handle_LV_SYS[1]))
    For $e = 1 To UBound($Pro_New, 2) - 1
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[1], _GUICtrlListView_GetItemCount($Handle_LV_SYS[1]) - 1, $Pro_New[$Null][$e], $e)
    Next
    EndIf
    _ArrayAdd($Temp, $Pro_New_List[$i][$Null])
    Next
    For $i = 1 To $Pro_Alt[$Null]
    If Not IsInArray($Temp, $Pro_Alt[$i]) Then _GUICtrlListView_DeleteItem($Handle_LV_SYS[1], (IsInArray($Pro_Alt, $Pro_Alt[$i], $Null, $Null, $Null, $Null, 1) - 1))
    Next
    Return _GUICtrlListView_EndUpdate($Handle_LV_SYS[1])
    EndFunc ;==>Prozess_Update

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

    Func GetListViewToArray($HWnd)
    Local $UB = _GUICtrlListView_GetItemCount($Handle_LV_SYS[$HWnd])
    Local $GCount[$UB + 1]
    Local $GCount_H[$UB + 1]
    $GCount[$Null] = $UB
    $GCount_H[$Null] = $UB
    For $i = 1 To $GCount[$Null]
    If Not $HWnd Then $GCount_H[$i] = _GUICtrlListView_GetItemText($Handle_LV_SYS[$HWnd], ($i - 1), 4)
    $GCount[$i] = _GUICtrlListView_GetItemText($Handle_LV_SYS[$HWnd], ($i - 1))
    Next
    If Not $HWnd Then
    Local $GCount_GCount_H[2]
    $GCount_GCount_H[$Null] = $GCount
    $GCount_GCount_H[1] = $GCount_H
    Return $GCount_GCount_H
    Else
    Return $GCount
    EndIf
    EndFunc ;==>GetListViewToArray

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

    Func Anw_Prog_P_S()
    Switch _GUICtrlTab_GetCurSel($Tab)
    Case $Null
    $iGetIthm = _GUICtrlListView_GetSelectionMark($Handle_LV_SYS[$Null])
    Switch @GUI_CtrlId
    Case $SYS[0], $Contextmenuitem_0[0]
    If ($iGetIthm > -1) Then
    If Not WinClose(_GUICtrlListView_GetItemText($Handle_LV_SYS[$Null], $iGetIthm)) Then
    If (MsgBox(4, 'Die Anwendung konnte nicht geschlossen werden!', 'Zwingen das Fenster zu schließen?') = 6) Then WinKill(_GUICtrlListView_GetItemText($Handle_LV_SYS[$Null], $iGetIthm))
    EndIf
    EndIf
    Case $SYS[1], $Contextmenuitem_0[1]
    If ($iGetIthm > -1) Then WinActivate(_GUICtrlListView_GetItemText($Handle_LV_SYS[$Null], $iGetIthm), '')
    Case $SYS[2], $MenuItem_0, $Contextmenuitem_0[2]
    Local $New_Task = FileOpenDialog('Durchsuchen', @DesktopDir, 'Alle (*.*)', 1 + 2, '', $Form[$Null])
    If @error Then Return False
    ShellExecute($New_Task)
    EndSwitch
    Case 1
    $iGetIthm = _GUICtrlListView_GetSelectionMark($Handle_LV_SYS[1])
    Switch @GUI_CtrlId
    Case $SYS[3], $Contextmenuitem_1[1]
    If ($iGetIthm > -1) Then
    Local $Text = 'Möchten sie "' & _GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm) & '" Beenden?' & @CRLF & @CRLF & _
    'Wenn sie ein geöffnetes Programm diesem Prozess zugeordnet ist, ' & _
    'wird es geschlossen und alle nicht gespeicherten Daten gehen Verloren ' & _
    'Wenn sie ein Systemprozess beenden, kann dieses dazu führen, dass das ' & _
    'System instabil wird. Möchten sie den Vorgang fortsetzen?'
    Local $PID = ProcessExists(_GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm))
    If Not $PID Then Return MsgBox(4112, 'Fehler', 'Der Process Existiert nicht!')
    If (MsgBox(4, 'Process_Beenden', $Text) = 6) Then
    ProcessClose($PID)
    Switch @error
    Case 1
    MsgBox(4112, 'Fehler', 'OpenProcess fehlgeschlagen!')
    Case 2
    MsgBox(4112, 'Fehler', 'AdjustTokenPrivileges fehlgeschlagen!')
    Case 3
    MsgBox(4112, 'Fehler', 'TerminateProcess fehlgeschlagen!')
    Case 4
    MsgBox(4112, 'Fehler', 'Es konnte nicht sichergestellt werden, ob der Prozess existiert!')
    EndSwitch
    EndIf
    EndIf
    Case $Contextmenuitem_1[$Null]
    If ($iGetIthm > -1) Then ShellExecute(StringTrimRight(_GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm, 5), StringLen(_GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm)) + 1))
    Case $Contextmenuitem_1[2]
    If ($iGetIthm > -1) Then
    If _WinSetTrans($Null) Then $Set_Label = _GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm)
    GUICtrlSetData($Label, 'Möchten sie die Priorität von "' & $Set_Label & '" ändern?')
    GUISetState(@SW_SHOW, $Form[1])
    EndIf
    Case $Checkbox[$Null], $Checkbox[1], $Checkbox[2], $Checkbox[3]
    Local $Set
    Switch GUICtrlRead(@GUI_CtrlId, 1)
    Case 'Niedrig'
    $Set = $Null
    Case 'Normal'
    $Set = 2
    Case 'Hoch'
    $Set = 4
    Case 'Echtzeit'; nicht bei Win7
    $Set = 5
    EndSwitch
    ProcessSetPriority($Set_Label, $Set)
    GUISetState(@SW_HIDE, $Form[1])
    EndSwitch
    Case 2
    Local $ErrHaw
    $iGetIthm = _GUICtrlListView_GetSelectionMark($Handle_LV_SYS[2])
    Switch @GUI_CtrlId
    Case $Contextmenuitem_2[$Null]
    If ($iGetIthm > -1) Then
    $ErrHaw = _Services_Running(_GUICtrlListView_GetItemText($Handle_LV_SYS[2], $iGetIthm))
    If ($ErrHaw = 'Erfolg') Then _GUICtrlListView_SetItemText($Handle_LV_SYS[2], $iGetIthm, ' Wird ausgeführt ', 5)
    EndIf
    MsgBox(64, ' Dienst - Start ', $ErrHaw)
    Case $Contextmenuitem_2[1]
    If ($iGetIthm > -1) Then
    $ErrHaw = _Services_Stopp(_GUICtrlListView_GetItemText($Handle_LV_SYS[2], $iGetIthm))
    If ($ErrHaw = 'Erfolg') Then _GUICtrlListView_SetItemText($Handle_LV_SYS[2], $iGetIthm, ' Beendet ', 5)
    EndIf
    MsgBox(64, 'Dienst - Stopp', $ErrHaw)
    EndSwitch
    EndSwitch
    EndFunc ;==>Anw_Prog_P_S

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

    Func _CPU_Darstellung()
    If _WinSetTrans($Null) And GUISetState(@SW_SHOW, $Form[2]) Then Local $iTimer = TimerInit()
    Local $iOnEventMode = Opt('GUIOnEventMode', $Null)
    Do
    If (Round(TimerDiff($iTimer)) > 875) Then
    $mem = MemGetStats()
    $aCPU = Refresh()
    For $i = $Null To UBound($aCPU) - 2
    GUICtrlSetData($core[$i], $aCPU[$i])
    GUICtrlSetData($P_core[$i], $aCPU[$i] & '%')
    Next
    GUICtrlSetData($GesamtRAM, Round($mem[1] / 1024))
    GUICtrlSetData($VerfuegbarerRAM, Round($mem[2] / 1024))
    GUICtrlSetData($BenutztRAM, Round(($mem[1] - $mem[2]) / 1024))
    GUICtrlSetData($Arbeitspeicher, Round(($mem[1] - $mem[2]) * 100 / $mem[1]))
    GUICtrlSetData($P_Arbeitspeicher, Round(($mem[1] - $mem[2]) / 1024) & ' MB')
    _GUICtrlStatusBar_SetText($iStatus, StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC), 2)
    _GUICtrlStatusBar_SetText($iStatus, 'CPU-Auslastung: ' & $aCPU[UBound($aCPU) - 1] & ' % ' & ' Physikalischer Speicher: ' & $mem[0] & '%', 1)
    $iTimer = TimerInit()
    EndIf
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    If GUISetState(@SW_HIDE, $Form[2]) And _WinSetTrans(1) Then Opt('GUIOnEventMode', $iOnEventMode)
    EndFunc ;==>_CPU_Darstellung

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

    Func LV_Sort($HWnd, $iSubItem)
    Local $Split
    Local $1D = _GUICtrlListView_GetItemCount($HWnd) - 1
    Local $2D = _GUICtrlListView_GetColumnCount($HWnd) - 1
    Local $Sort_Array[$1D + 1]
    For $i = $Null To $1D
    $Sort_Array[$i] = _GUICtrlListView_GetItemText($HWnd, $i, $iSubItem) & '|' & $i
    Next
    QuickSort($Sort_Array, $Null, $1D)
    Local $Set_Array[$1D + 1][$2D + 1]
    For $i = $Null To $1D
    $Split = StringMid($Sort_Array[$i], StringInStr($Sort_Array[$i], '|', $Null, -1) + 1, StringLen($Sort_Array[$i]))
    For $e = $Null To $2D
    $Set_Array[$i][$e] = _GUICtrlListView_GetItemText($HWnd, $Split, $e)
    Next
    Next
    _ObjektAr2DDubDel($Set_Array)
    If _GUICtrlListView_DeleteAllItems($HWnd) Then
    Switch $HWnd
    Case $Handle_LV_SYS[$Null]
    If _GUIImageList_SetImageCount($Icon, _GUICtrlListView_GetItemCount($HWnd)) Then _GUICtrlListView_BeginUpdate($HWnd)
    For $i = $Null To $1D
    $Index = _GUIImageList_AddIcon($Icon, $Set_Array[$i][5])
    _GUICtrlListView_AddItem($HWnd, $Set_Array[$i][$Null], $Index)
    For $e = $Null To $2D
    _GUICtrlListView_AddSubItem($HWnd, $Index, $Set_Array[$i][$e], $e)
    Next
    Next
    _GUICtrlListView_EndUpdate($HWnd)
    Case Else
    If _GUICtrlListView_BeginUpdate($HWnd) Then _GUICtrlListView_AddArray($HWnd, $Set_Array)
    _GUICtrlListView_EndUpdate($HWnd)
    EndSwitch
    EndIf
    Return True
    EndFunc ;==>LV_Sort

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

    Func _WinSetTrans($Flag)
    Switch $Flag
    Case $Null
    For $i = 255 To 100 Step -$Trans
    WinSetTrans($Form[0], '', $i)
    Next
    Case 1
    For $i = 100 To 255 Step +$Trans
    WinSetTrans($Form[0], '', $i)
    Next
    EndSwitch
    Return True
    EndFunc ;==>_WinSetTrans

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

    Func Refresh()
    $objRefresher.Refresh(0)
    If IsObj($objRefreshableItem) Then
    $i = $Null
    For $objItem In $objRefreshableItem.ObjectSet
    $aCPU[$i] = $objItem.PercentProcessorTime
    $i += 1
    Next
    EndIf
    Return $aCPU
    EndFunc ;==>Refresh

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

    Func ErrorExit()
    MsgBox(4112, 'Error', 'Anfrage ist Fehlgeschlagen Programm wird Beemdet!', 5)
    Exit
    EndFunc ;==>ErrorExit

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

    Func Ende()
    If _WinSetTrans($Null) Then Exit
    EndFunc ;==>Ende

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

    Func Form_HIDE()
    If GUISetState(@SW_HIDE, @GUI_WinHandle) Then _WinSetTrans(1)
    EndFunc ;==>Form_HIDE

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

    While 1 * Sleep(875)
    $mem = MemGetStats()
    $aCPU = Refresh()
    _GUICtrlStatusBar_SetText($iStatus, 'CPU-Auslastung: ' & $aCPU[UBound($aCPU) - 1] & ' % ' & ' Physikalischer Speicher: ' & $mem[0] & '%', 1)
    _GUICtrlStatusBar_SetText($iStatus, StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC), 2)
    WEnd

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

    Func MY_WM_GETMINMAXINFO($HWnd, $msg, $wParam, $lParam)
    #forceref $HWnd, $msg, $wParam
    Local $Info_Chek = DllStructCreate('int;int;int;int;int;int;int;int;int;int', $lParam)
    DllStructSetData($Info_Chek, 7, $Breite_K)
    DllStructSetData($Info_Chek, 8, $Hoehe_K)
    DllStructSetData($Info_Chek, 9, $Breite)
    Return DllStructSetData($Info_Chek, 10, $Hoehe)
    EndFunc ;==>MY_WM_GETMINMAXINFO

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

    Func WM_SIZE($HWnd, $iMsg, $iwParam, $ilParam)
    #forceref $HWnd, $iMsg, $iwParam, $ilParam
    Local $aWinPos = WinGetPos($Form[$Null])
    Local $aParts[3] = [150, ($aWinPos[2] - 100), 50]
    _GUICtrlStatusBar_SetParts($iStatus, $aParts)
    _GUICtrlStatusBar_Resize($iStatus)
    EndFunc ;==>WM_SIZE

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

    Func WM_NOTIFY($HWnd, $iMsg, $iwParam, $ilParam)
    #forceref $HWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR_0, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    Switch $hWndFrom
    Case $Handle_LV_SYS[0], $Handle_LV_SYS[1], $Handle_LV_SYS[2]
    Switch $iCode
    Case $LVN_COLUMNCLICK
    AdlibUnRegister('Update')
    If LV_Sort($hWndFrom, DllStructGetData(DllStructCreate($tagNMLISTVIEW_0, $ilParam), 'SubItem')) Then AdlibRegister('Update', 1000)
    EndSwitch
    EndSwitch
    Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    #include <System.au3>

    Spoiler anzeigen
    [autoit]

    Global Static $obWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2')
    Global $Com_Fehler = ObjEvent('AutoIt.Error', 'Com_Fehler')
    Global $Error = False
    Global $i = 0

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

    Global $Max = 255
    Global $aDFL[$Max][5], $DCN, $GWMFN, $Cont = 1
    Global $Not_Klassenname = 'Button|Progman|DV2ControlHost|Desktop User Picture|tooltips_class32'

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

    Func New_Prozess($Flag, $Process_New, $Error)
    Local $Us, $sU
    Local $co = $obWMI.ExecQuery('SELECT * FROM Win32_Process')
    If Not IsObj($co) Then Return SetError(1, 1, -1)
    Switch $Flag
    Case 0
    Local $Prozess[1][8]
    For $ob In $co
    If ($ob.ProcessId = $Process_New) Then
    $Prozess[0][0] = $ob.Caption
    $Prozess[0][1] = $ob.ProcessId
    $Prozess[0][2] = $ob.ParentProcessId
    If (Not $Error) Then
    If $ob.GetOwner($sU, $Us) = 0 Then $Prozess[0][3] = $sU & '\' & $Us
    EndIf
    $Prozess[0][4] = $ob.Priority
    $Prozess[0][5] = $ob.ExecutablePath
    $Prozess[0][6] = $ob.WriteTransferCount
    $Prozess[0][7] = $ob.WorkingSetSize
    EndIf
    Next
    Return $Prozess
    Case 1
    Local $Prozess[$co.Count - 1][3]
    $i = 0
    For $ob In $co
    If $i Then
    $Prozess[$i - 1][0] = $ob.Caption
    $Prozess[$i - 1][1] = $ob.ProcessId
    $Prozess[$i - 1][2] = $ob.ExecutablePath
    EndIf
    $i += 1
    Next
    Return $Prozess
    Case 2
    Local $Prozess[$co.Count - 1][8]
    $i = 0
    For $ob In $co
    If $i >= 1 Then
    $Prozess[$i - 1][0] = $ob.Caption
    $Prozess[$i - 1][1] = $ob.ProcessId
    $Prozess[$i - 1][2] = $ob.ParentProcessId
    If (Not $Error) Then
    If $ob.GetOwner($sU, $Us) = 0 Then $Prozess[$i - 1][3] = $sU & '\' & $Us
    EndIf
    $Prozess[$i - 1][4] = $ob.Priority
    $Prozess[$i - 1][5] = $ob.ExecutablePath
    $Prozess[$i - 1][6] = $ob.WriteTransferCount
    $Prozess[$i - 1][7] = $ob.WorkingSetSize
    EndIf
    $i += 1
    Next
    Return $Prozess
    EndSwitch
    EndFunc ;==>New_Prozess

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

    Func LA_Services($ComputerName)
    Local $ServSet = ObjGet('winmgmts:{impersonationLevel=impersonate}!//' & $ComputerName)
    Local $ob = $ServSet.InstancesOf('win32_service')
    If Not IsObj($ob) Then
    MsgBox(0, 'Error', 'Fehler, Objekt konnte nicht erstellt werden' & @CRLF & 'Programm wird beendet!')
    Exit
    EndIf
    Local $obDienste[$ob.Count][10]
    $i = 0
    For $Serv In $ob
    $obDienste[$i][0] = $Serv.Name
    If ($Serv.ProcessID <> 0) Then $obDienste[$i][1] = $Serv.ProcessID
    Switch $Serv.acceptPause
    Case True
    $obDienste[$i][2] = ' Ja '
    Case Else
    $obDienste[$i][2] = ' Nein '
    EndSwitch
    Switch $Serv.acceptStop
    Case True
    $obDienste[$i][3] = ' Ja '
    Case Else
    $obDienste[$i][3] = ' Nein '
    EndSwitch
    $obDienste[$i][4] = StringReplace($Serv.PathName, '"', '')
    $obDienste[$i][5] = $Serv.Status
    Switch $Serv.State
    Case 'Running'
    $obDienste[$i][6] = ' Wird ausgeführt '
    Case Else
    $obDienste[$i][6] = ' Beendet '
    EndSwitch
    $obDienste[$i][7] = $Serv.StartMode
    $obDienste[$i][8] = StringProper($Serv.StartName)
    $obDienste[$i][9] = $Serv.Caption
    $i += 1
    Next
    Return $obDienste
    EndFunc ;==>LA_Services

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

    Func _Services_Running($Dienst)
    ;Startet ein Service
    Local $co
    $co = $obWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"')
    If Not IsObj($co) Then Return SetError(1, 1, -1)
    For $ob In $co
    Return _Service_Error($ob.StartService())
    Next
    EndFunc ;==>_Services_Running

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

    Func _Services_Stopp($Dienst)
    ;Beendet ein Service
    Local $co
    $co = $obWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"')
    If Not IsObj($co) Then Return SetError(1, 1, -1)
    For $ob In $co
    Return _Service_Error($ob.StopService())
    Next
    EndFunc ;==>_Services_Stopp

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

    Func QuickSort(ByRef $Array, ByRef $LB, ByRef $UB)
    Local $P1, $P2, $Ref, $Temp
    $P1 = $LB
    $P2 = $UB
    $Ref = $Array[Int(($P1 + $P2) / 2)]
    Do
    While ($Array[$P1] < $Ref)
    $P1 += 1
    WEnd
    While ($Array[$P2] > $Ref)
    $P2 -= 1
    WEnd
    If ($P1 <= $P2) Then
    $Temp = $Array[$P1]
    $Array[$P1] = $Array[$P2]
    $Array[$P2] = $Temp
    $P1 += 1
    $P2 -= 1
    EndIf
    Until ($P1 > $P2)
    If ($LB < $P2) Then QuickSort($Array, $LB, $P2)
    If ($P1 < $UB) Then QuickSort($Array, $P1, $UB)
    EndFunc ;==>QuickSort

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

    Func _ObjektAr2DDubDel(ByRef $avArray)
    Local $ScripDict = ObjCreate('Scripting.Dictionary')
    If @error Then Return SetError(1, 1, -1)
    Local $iTmp
    Local $TmpArray
    Local $iTmp_Save
    Local $TmpArrayReturn[1][2]
    Local $iEnd = UBound($avArray)
    Local $1D2D = UBound($avArray, 2)
    If @error = 2 Then
    For $For In $avArray
    If Not $ScripDict.Exists($For) Then $ScripDict.Add($For, 0).RemoveAll
    Next
    $avArray = $ScripDict.Keys()
    Return ($iEnd - UBound($avArray))
    Else
    For $1D = 0 To $iEnd - 1
    $TmpArray &= '|'
    For $2D = 0 To $1D2D - 1
    $TmpArray &= $avArray[$1D][$2D]
    Next
    Next
    $TmpArray = StringSplit(StringTrimLeft($TmpArray, 1), '|')
    For $i = 1 To UBound($TmpArray) - 1
    $iTmp = $TmpArray[$i]
    If Not $ScripDict.Exists($iTmp) Then
    $ScripDict.Add($iTmp, 0).RemoveAll
    $iTmp_Save &= '|' & $i - 1
    EndIf
    Next
    $1D = 0
    $TmpArray = ''
    $TmpArray = StringSplit(StringTrimLeft($iTmp_Save, 1), '|')
    If ($TmpArray[0] = $iEnd) Then Return ($iEnd - $TmpArray[0])
    ReDim $TmpArrayReturn[$TmpArray[0]][$1D2D]
    For $i = 1 To UBound($TmpArray) - 1
    For $2D = 0 To $1D2D - 1
    $TmpArrayReturn[$1D][$2D] = $avArray[$TmpArray[$i]][$2D]
    Next
    $1D += 1
    Next
    $avArray = $TmpArrayReturn
    Return ($iEnd - $1D)
    EndIf
    EndFunc ;==>_ObjektAr2DDubDel

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

    Func StartCallback()
    Local $DCHwnd = DllCallbackRegister('DetailFensterList', 'int', 'hwnd;lparam')
    DllCall('user32.dll', 'int', 'EnumWindows', 'ptr', DllCallbackGetPtr($DCHwnd), 'lparam', 10)
    If @error Then Return SetError(1, 0, -1)
    DllCallbackFree($DCHwnd)
    $aDFL[0][0] = ($Cont - 1)
    $Cont = 1
    Return $aDFL
    EndFunc ;==>StartCallback

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

    Func DetailFensterList($HWnd, $lParam)
    #forceref $lParam
    $DCN = DllCall('user32.dll', 'uint', 'GetClassNameW', 'hwnd', $HWnd, 'wstr', '', 'uint', $Max)
    If @error Then Return SetError(1, 0, -1)
    If WinGetTitle($HWnd) And BitAND(WinGetState($HWnd), 2) And Not StringInStr($Not_Klassenname, $DCN[2]) Then
    $GWMFN = DllCall('user32.dll', 'uint', 'GetWindowModuleFileNameW', 'hwnd', $HWnd, 'wstr', '', 'uint', $Max)
    If @error Then Return SetError(1, 0, -2)
    $aDFL[$Cont][0] = $HWnd
    $aDFL[$Cont][1] = WinGetTitle($HWnd)
    $aDFL[$Cont][2] = $DCN[2]
    $aDFL[$Cont][3] = WinGetProcess($HWnd)
    $aDFL[$Cont][4] = $GWMFN[2]
    $Cont += 1
    EndIf
    Return True
    EndFunc ;==>DetailFensterList

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

    Func IsInArray(Const $sArray, Const $sItem = '', Const $iDim = 0, $nStart = 0, $nEnd = 0, Const $case = 0, Const $iFlag = 0)
    If Not IsArray($sArray) Or Not $sItem Or (UBound($sArray, 0) > 2) Then Return SetError(1, 0, -1)
    If IsMissing($nEnd) Then $nEnd = UBound($sArray)
    If ($nStart > $nEnd) Then $nStart = 0
    If Not UBound($sArray, 2) Then
    For $i = $nStart To $nEnd - 1
    If Not StringCompare($sArray[$i], $sItem, $case) Then Return IIF(Not $iFlag, True, $i)
    Next
    Else
    If ($iDim > (UBound($sArray, 2) - 1)) Then Return SetError(1, 0, -2)
    For $i = $nStart To $nEnd - 1
    If Not StringCompare($sArray[$i][$iDim], $sItem, $case) Then Return IIF(Not $iFlag, True, $i)
    Next
    EndIf
    Return False
    EndFunc ;==>IsInArray

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

    Func IIF($V_Expr, $F_True = True, $F_False = False)
    If $V_Expr Then Return $F_True
    Return $F_False
    EndFunc ;==>IIF

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

    Func IsMissing(Const $iData)
    Return (Not $iData)
    EndFunc ;==>IsMissing

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

    Func StringProper($s_String)
    Local $iX = 0
    Local $CapNext = 1
    Local $s_nStr = ""
    Local $s_CurChar
    For $iX = 1 To StringLen($s_String)
    $s_CurChar = StringMid($s_String, $iX, 1)
    Select
    Case $CapNext = 1
    If StringRegExp($s_CurChar, '[a-zA-ZÀ-ÿšœžŸ]') Then
    $s_CurChar = StringUpper($s_CurChar)
    $CapNext = 0
    EndIf
    Case Not StringRegExp($s_CurChar, '[a-zA-ZÀ-ÿšœžŸ]')
    $CapNext = 1
    Case Else
    $s_CurChar = StringLower($s_CurChar)
    EndSelect
    $s_nStr &= $s_CurChar
    Next
    Return $s_nStr
    EndFunc ;==>StringProper

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

    Func StringToDate($Date)
    Return (StringMid($Date, 5, 2) & '/' & StringMid($Date, 7, 2) & '/' & StringLeft($Date, 4) & ' ' & StringMid($Date, 9, 2) & ':' & StringMid($Date, 11, 2) & ':' & StringMid($Date, 13, 2))
    EndFunc ;==>StringToDate

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

    Func _Service_Error($Error)
    ; Error Handle
    Local $Rerurn
    Switch $Error
    Case 0
    $Rerurn = 'Erfolg'
    Case 1
    $Rerurn = 'Nicht unterstützt'
    Case 2
    $Rerurn = 'Zugriff verweigert'
    Case 3
    $Rerurn = 'Abhängige Dienste werden ausgeführt'
    Case 4
    $Rerurn = 'Invalid Service Control Ungültige Service Control'
    Case 5
    $Rerurn = 'Service Control kann nicht akzeptieren'
    Case 6
    $Rerurn = 'Service ist nicht aktiv'
    Case 7
    $Rerurn = 'Service Request timeout'
    Case 8
    $Rerurn = 'Unbekannter Fehler'
    Case 9
    $Rerurn = 'Pfad nicht gefunden'
    Case 10
    $Rerurn = 'Service bereits gestoppt'
    Case 11
    $Rerurn = 'Service Datenbank gesperrt'
    Case 12
    $Rerurn = 'Service Dependency Deleted'
    Case 13
    $Rerurn = 'Service Dependency Failure'
    Case 14
    $Rerurn = 'Service für Behinderte'
    Case 15
    $Rerurn = 'Service Fehler bei der Anmeldung'
    Case 16
    $Rerurn = 'Service zum Löschen markiert'
    Case 17
    $Rerurn = 'Service Nr. Thread'
    Case 18
    $Rerurn = 'Status Circular Dependency'
    Case 19
    $Rerurn = 'Status Duplicate Name'
    Case 20
    $Rerurn = 'Status - Ungültiger Name'
    Case 21
    $Rerurn = 'Status - Ungültiger Parameter'
    Case 22
    $Rerurn = 'Status - Invalid Service Account'
    Case 23
    $Rerurn = 'Status - Dienst existiert'
    Case 24
    $Rerurn = 'Service bereits angehalten'
    EndSwitch
    Return $Rerurn
    EndFunc ;==>_Service_Error

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

    Func Com_Fehler()
    Switch $Com_Fehler
    Case 0
    $Error = True
    Case Else
    $Error = False
    EndSwitch
    EndFunc ;==>Com_Fehler

    [/autoit]

    LG Kleiner

  • Hallo,

    Muss zuerst mal sagen sieht wirklich klasse aus bis jetzt :)

    Bugs die mir gerade aufgefallen sind:

    Ich Beende eine Anwendung,dann geht es ziemlich lange bis sich die Anwendungsliste aktualisiert, ein Icon nach dem anderen verschiebt sich und am Ende stimmen die Icons nicht mehr: Autoit hat dann z.B. das Icon von Firefox.

    Wenn ich ein neues Programm starte z.B. Firefox und dann alle anderen aktuellen Anwendungen anklicken in deinem Taskmanager übernehmen diese Anwendungen das Icon des Firefox's.

    Verbesserungsvorschläge meiner Seits: :)

    Bei einem Klick im Reiter Processe auf ProcesseName evt. eine sortierung nach Alphapet von oben nach unten und bei wiederholtem Klicken von unten nach oben. (erleichtert die Suche nach einem Prozess)

    Lg, Fabian

  • Netter Task Manager.
    Funktioniert gut und zeigt viele infos. (Mehr als der Windows TastManager)
    Außerdem find ich es gut das die Dienste angezeit werden, so muss man nicht immer die services.msc ausführen.
    MfG. PrideRage

    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.

  • Die Iconn´s :cursing:

    Es wird bei dir aus unerklärlichen gründen der falsche Index gelöscht!

    Ich habe lang daran gearbeitet bis bei mir unter Win7 alles gut läuft, welches OS hast du?

    Das mit den Sortierungen wird noch folgen.

    LG Keiner

  • Die Iconn´s :cursing:

    Ich habe lang daran gearbeitet bis bei mir unter Win7 alles gut läuft, welches OS hast du?

    Das mit den Sortierungen wird noch folgen.

    LG Keiner

    Ach habe ich glatt vergessen sry... Habe Windows 7 64 Bit

  • Habe das selbe OS!

    Ist es immer so?

    LG Kleiner

    Nein irgendwie nicht 8|

    Habe jetzt 3 Minuten Anwendungen beendet und neu gestartet ohne Probleme und jetzt hat FireFox das Icon von Skype übernommen, aber kann dir nicht erklären wieso genau jetzt ^^

  • Dann steckt da immer noch der Wurm drin, bei mir Egal was ich Starte oder Beende läuft wunderbar. ?(

    LG Kleiner

    Habs jetzt einbischen genauer:

    Firefox ist offen -> Ich öffne Skype -> Während dem laden von Skype klicke ich in deinem Task_Manager auf Firefox -> Firefox bekommt das Icon von Skype
    Firefox ist offen -> Ich öffne Skype -> Warte bis Skype geladen ist und klicke in deinem Task_Manager auf Firefox -> Firefox behält sein Icon

    Lg, Fabian

  • Ich weiß jetzt nicht genau ob das was bringt den Manager immer im Vordergrund zu halten aber Probier mal bitte.
    Setz in die While schleife folgendes ein :

    [autoit]

    WinSetOnTop($Form[0], '', 1)

    [/autoit]

    LG Kleiner

  • Ich weiß jetzt nicht genau ob das was bringt den Manager immer im Vordergrund zu halten aber Probier mal bitte.
    Setz in die While schleife folgendes ein :

    [autoit]

    WinSetOnTop($Form[0], '', 1)

    [/autoit]

    LG Kleiner

    Habs jetzt mehrmals ausprobiert und funktioniert soweit :thumbup:

    • Offizieller Beitrag

    @kleiner27. Hast dir ein gutes Thema gesucht. :thumbup:

    Zu deinem Problem bei den Icons:

    Du solltest keine Icons aus der Imagelist löchen, sonst wenden die Icons nicht mehr richtig angezeigt.
    Löschst du z.B. den 4. Eintrag so werden die darauffolgenden neu nummeriert. Die zuordnung stimmt somit nicht mehr.
    Wenn ein neues Programm hinzukommt, einfach das Image an die Imageliste anhängen. Also am besten fortlaufend nummerieren.
    Ggf. einen Zähler einbauen der nach x Updates die Liste neu schreibt, um eine zu hohe Speicherauslastung zu verhindern.
    Edit 1:
    Verbesserungsvorschläge:

    Du solltest bei neuen Fenstern zusätzlich die Winhandles mit einbeziehen. Allein den Wintitel bringt nicht viel. Wenn du z.B. 4 mal den IE öffnest, dann wird nur 1 mal angezeigt, wenn die Titel gleich sind.
    Das Problem das Dater im nächsten Post beschrieben hat, kommt von deiner Verwendung von WM_SIZE. Diese Message wird beim verschieben des Fenstern ständig gesendet. Somit wird die zugeordnete Funktion auch mehrfach ausgeführt.
    Ich würde dir eher die Message WM_EXITSIZEMOVE empfehlen. http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx

    Edit 2: WM_EXITSIZEMOVE ist doch keine gute Wahl. Da wird die Statusbar erst nach dem SIZE\MOVE angepaßt. Eine Möglichkeit wäre die Breite der GUI in einer Globalen Variable zu speichern und nur bei Größenänderung die Satusbar zu resizen.

  • Hey.

    Echt gut gelungen, nur ich weiß jetzt nicht, ob es schon jemand geschrieben hat aber beim verschieben der GUI rucktelt die GUI irgendwie, als ob sie hängen bleibt.

    mfg Darter

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Vielen dank Leute!

    @Paupi

    BugFix hat mich auch schon darauf hingewiesen.
    Nach den Arbeitsschritten verhalten sich doch beide Indexe gleich wenn eins gelöscht wird rutschen die unten stehen nach oben.

    Laut Hilfe:
    Wenn zum Beispiel das Bild mit dem Index 0 entfernt wird, dann bekommt das Bild mit dem Index 1 den Index 0, das Bild mit dem Index 2 den Index 1 und so weiter.
    Das ist mit dem ListView nicht anders, also ist das Verfahren richtig, es wird mal so mal so interpretiert.
    Habe das explizite löschen rausgenommen, das Index wird jetzt nur noch bei der Neuerstellung angepasst.
    Erweiter habe ich auch den Vorschlag mit den Fensterhandel jetzt kann man auch mehre Fenster vom selben Programm aufmachen.

    Steh jetzt vor ein neues Abenteuer, habe gerade _GUICtrlListView_RegisterSortCallBack eingebunden nur tut sich Garnichts ????

    code:

    Spoiler anzeigen
    [autoit]

    ;#RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=ICON_385.ICO
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Array.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <GuiStatusBar.au3>
    #include <GuiTab.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    #include <System.au3>

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

    Opt('GUIOnEventMode', 1)
    Opt('MustDeclareVars', 1)

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

    $Debug_LV = False

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

    Global $Form[2]

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

    Local $Tab
    Local $SYS[30]
    Local $Menue_SYS, $MenuItem_0
    Local $aWinList, $aProcess, $aProcess_0, $Icon
    Local $Breite = @DesktopWidth, $Hoehe = @DesktopHeight, $Breite_K = 410, $Hoehe_K = 455
    Local $Com_Fehler = ObjEvent('AutoIt.Error', 'Com_Fehler'), $Error = True, $Us, $sU, $co
    Local $Not_Klassenname = 'Button|Progman|DV2ControlHost|Desktop User Picture|tooltips_class32'
    Local $iParts[3] = [180, 780, 50], $iStatus, $Dienste, $mem, $iGetIthm = -1, $Label, $Checkbox[4], $Set_Prio, $Set_Label
    Local $Bezeichnung_0[7][2] = [['Task', 260],['EXE', 60],['Status', 60],['PID', 40],['Handel', 100],['Pfad', 260],['Klassenname', 100]]
    Local $LV_SYS[5], $Handle_LV_SYS[5], $Index, $Contextmenu[3], $Contextmenuitem_0[3], $Contextmenuitem_1[3], $Contextmenuitem_2[2], $Prio_Item[4]
    Local $Bezeichnung_1[8] = ['ProzesseName', 'PID', 'Parent PID', 'Eigentümer', 'Priorität', 'Ausführbaren Pfad', 'Geschriebenen Daten', 'Speichernutzung']
    Local $Bezeichnung_2[9] = ['Interner Name', 'Akzeptiert Pause', 'Akzeptiert Stop', 'Pfad', 'Status', 'Zustand', 'StartMode', 'StartName', 'Beschreibung']

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

    $Form[0] = GUICreate('Task_Manager', 870, 460, (@DesktopWidth - 870) / 2, (@DesktopHeight - 460) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS)
    GUISetOnEvent(-3, 'Ende')

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

    $Menue_SYS = GUICtrlCreateMenu(' Datein ')
    $MenuItem_0 = GUICtrlCreateMenuItem(' Neuer Task ( Ausführen.... ) ', $Menue_SYS)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    GUICtrlCreateMenuItem(' Beenden ', $Menue_SYS)
    GUICtrlSetOnEvent(-1, 'Ende')

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

    $Tab = GUICtrlCreateTab(10, 8, 850, 400)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)

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

    GUICtrlCreateTabItem('Anwendungen')
    $LV_SYS[0] = GUICtrlCreateListView('', 25, 50, 818, 315, $LVS_SINGLESEL + $LVS_EX_DOUBLEBUFFER)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $Handle_LV_SYS[0] = GUICtrlGetHandle($LV_SYS[0])
    $Icon = _GUIImageList_Create(16, 16, 5)
    _GUICtrlListView_SetImageList($Handle_LV_SYS[0], $Icon, 1)
    For $i = 0 To 6
    _GUICtrlListView_AddColumn($Handle_LV_SYS[0], $Bezeichnung_0[$i][0], $Bezeichnung_0[$i][1])
    Next
    $aProcess = New_Prozess(1, '', '')
    $aWinList = _WinAPI_EnumWindowsTop()
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[0])
    For $i = 0 To UBound($aProcess) - 1
    For $e = 1 To $aWinList[0][0]
    If (WinGetProcess($aWinList[$e][0]) = $aProcess[$i][1] And $aProcess[$i][1] <> @AutoItPID) Then
    If (WinGetTitle($aWinList[$e][0]) <> '' And Not StringRegExp($aWinList[$e][1], $Not_Klassenname)) Then
    $Index = _GUIImageList_AddIcon($Icon, $aProcess[$i][2])
    _GUICtrlListView_AddItem($Handle_LV_SYS[0], WinGetTitle($aWinList[$e][0]), $Index)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $aProcess[$i][0], 1)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, ' Wird ausgeführt ', 2)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, WinGetProcess($aWinList[$e][0]), 3)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $aWinList[$e][0], 4)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $aProcess[$i][2], 5)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $aWinList[$e][1], 6)
    EndIf
    EndIf
    Next
    Next
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[0])
    $SYS[0] = GUICtrlCreateButton('Task beenden', 535, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $SYS[1] = GUICtrlCreateButton('Wechseln zu', 640, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $SYS[2] = GUICtrlCreateButton('Neuer Task...', 745, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    GUICtrlCreateTabItem('Processe')
    $LV_SYS[1] = GUICtrlCreateListView('', 25, 50, 818, 315, $LVS_SINGLESEL + $LVS_EX_DOUBLEBUFFER)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $Handle_LV_SYS[1] = GUICtrlGetHandle($LV_SYS[1])
    For $i = 0 To 7
    _GUICtrlListView_AddColumn($Handle_LV_SYS[1], $Bezeichnung_1[$i], 100)
    Next
    $aProcess_0 = New_Prozess(2, '', '')
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[1])
    _GUICtrlListView_AddArray($LV_SYS[1], $aProcess_0)
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[1])
    $SYS[3] = GUICtrlCreateButton('Process beenden', 745, 375, 100, 22)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKWIDTH + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    GUICtrlCreateTabItem('Dienste')
    $LV_SYS[2] = GUICtrlCreateListView('', 25, 50, 818, 315, $LVS_SINGLESEL + $LVS_EX_DOUBLEBUFFER)
    GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
    $Handle_LV_SYS[2] = GUICtrlGetHandle($LV_SYS[2])
    For $i = 0 To 8
    _GUICtrlListView_AddColumn($Handle_LV_SYS[2], $Bezeichnung_2[$i], 100)
    Next
    $Dienste = LA_Services(@ComputerName)
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[2])
    _GUICtrlListView_AddArray($LV_SYS[2], $Dienste)
    _GUICtrlListView_EndUpdate($Handle_LV_SYS[2])
    GUICtrlCreateTabItem('')

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

    $iStatus = _GUICtrlStatusBar_Create($Form[0])
    _GUICtrlStatusBar_SetParts($iStatus, $iParts)

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

    $Contextmenu[0] = GUICtrlCreateContextMenu($LV_SYS[0])
    $Contextmenuitem_0[0] = GUICtrlCreateMenuItem('Task beenden', $Contextmenu[0])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_0[1] = GUICtrlCreateMenuItem('Wechseln zu', $Contextmenu[0])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_0[2] = GUICtrlCreateMenuItem('Neuer Task...', $Contextmenu[0])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    $Contextmenu[1] = GUICtrlCreateContextMenu($LV_SYS[1])
    $Contextmenuitem_1[0] = GUICtrlCreateMenuItem('Dateipfad öffnen', $Contextmenu[1])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_1[1] = GUICtrlCreateMenuItem('Process beenden', $Contextmenu[1])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_1[2] = GUICtrlCreateMenuItem('Priorität festlegen', $Contextmenu[1])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    $Contextmenu[2] = GUICtrlCreateContextMenu($LV_SYS[2])
    $Contextmenuitem_2[0] = GUICtrlCreateMenuItem('Dienst starten', $Contextmenu[2])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Contextmenuitem_2[1] = GUICtrlCreateMenuItem('Dienst beenden', $Contextmenu[2])
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')

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

    GUISetState()

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

    _GUICtrlListView_RegisterSortCallBack($Handle_LV_SYS[0])
    _GUICtrlListView_RegisterSortCallBack($Handle_LV_SYS[1])
    _GUICtrlListView_RegisterSortCallBack($Handle_LV_SYS[2])

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

    $Form[1] = GUICreate('Priorität Festlegen', 350, 180, -1, -1)
    GUISetOnEvent(-3, 'Form_HIDE')
    $Label = GUICtrlCreateLabel('', 15, 20, 320, 25, $SS_CENTER)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel('Das Ändern der Priorität bestimmter Prozesse kann zu einer Instabilität des System führen.', 15, 55, 320, 25, $SS_CENTER)
    $Checkbox[0] = GUICtrlCreateButton('Niedrig', 40, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Checkbox[1] = GUICtrlCreateButton('Normal', 105, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Checkbox[2] = GUICtrlCreateButton('Hoch', 185, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    $Checkbox[3] = GUICtrlCreateButton('Echtzeit', 250, 115, 60, 20)
    GUICtrlSetOnEvent(-1, 'Anw_Prog_P_S')
    GUISetState(@SW_HIDE)

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

    AdlibRegister('Update', 1000)
    GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    GUIRegisterMsg(0x0024, 'MY_WM_GETMINMAXINFO')

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

    Func Update()
    Switch _GUICtrlTab_GetCurSel($Tab)
    Case 0
    WinListe_Update()
    _GUICtrlStatusBar_SetText($iStatus, ' Aktive Fenster : ' & _GUICtrlListView_GetItemCount($Handle_LV_SYS[0]), 0)
    Case 1
    Prozess_Update()
    _GUICtrlStatusBar_SetText($iStatus, ' Prozesse : ' & _GUICtrlListView_GetItemCount($Handle_LV_SYS[1]), 0)
    Case 2
    _GUICtrlStatusBar_SetText($iStatus, ' Dienste : ' & _GUICtrlListView_GetItemCount($Handle_LV_SYS[2]), 0)
    EndSwitch
    EndFunc ;==>Update

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

    Func WinListe_Update()
    Local $GIC_Win_A_P = GetListViewToArray(0)
    Local $Zu_sa = ProcessWinList(New_Prozess(1, '', ''), _WinAPI_EnumWindowsTop(), $GIC_Win_A_P[0], $GIC_Win_A_P[1])
    If (UBound($Zu_sa) = 1 Or Not IsArray($Zu_sa)) Then Return (0)
    _GUIImageList_SetImageCount($Icon, _GUICtrlListView_GetItemCount($Handle_LV_SYS[0]))
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[0])
    For $i = 1 To $Zu_sa[0][0]
    $Index = _GUIImageList_AddIcon($Icon, $Zu_sa[$i][5])
    _GUICtrlListView_AddItem($Handle_LV_SYS[0], $Zu_sa[$i][0], $Index)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $Zu_sa[$i][1], 1)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $Zu_sa[$i][2], 2)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $Zu_sa[$i][3], 3)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $Zu_sa[$i][4], 4)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $Zu_sa[$i][5], 5)
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[0], $Index, $Zu_sa[$i][6], 6)
    Next
    Return _GUICtrlListView_EndUpdate($Handle_LV_SYS[0])
    EndFunc ;==>WinListe_Update

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

    Func ProcessWinList($iPro, $iWin, $WinAlt, $WinAltPrue)
    Local $j = 1
    Local $F_Text
    Local $Temp[1]
    Local $Search_Index
    Local $ProWinTmp[10][7]
    For $i = 0 To UBound($iPro) - 1
    For $e = 1 To $iWin[0][0]
    If (WinGetProcess($iWin[$e][0]) = $iPro[$i][1] And $iPro[$i][1] <> @AutoItPID) Then
    $F_Text = WinGetTitle($iWin[$e][0])
    If ($F_Text <> '' And Not StringRegExp($iWin[$e][1], $Not_Klassenname)) Then
    $Search_Index = _ArraySearch($WinAlt, $F_Text) - 1
    If ($Search_Index = -1 Or $Search_Index = -2 Or BitAND(_ArraySearch($WinAltPrue, $iWin[$e][0]), @error)) Then
    If Win_Alt_Prue($WinAltPrue, $iWin[$e][0], $F_Text) Then
    _ArrayAdd($Temp, 'SetItemText' & $F_Text)
    ContinueLoop
    Else
    $ProWinTmp[$j][0] = $F_Text
    $ProWinTmp[$j][1] = $iPro[$i][0]
    $ProWinTmp[$j][2] = ' Wird ausgeführt '
    $ProWinTmp[$j][3] = WinGetProcess($iWin[$e][0])
    $ProWinTmp[$j][4] = $iWin[$e][0]
    $ProWinTmp[$j][5] = $iPro[$i][2]
    $ProWinTmp[$j][6] = $iWin[$e][1]
    $j += 1
    EndIf
    EndIf
    _ArrayAdd($Temp, $iWin[$e][0])
    EndIf
    EndIf
    Next
    Next
    $Temp[0] = UBound($Temp) - 1
    If ($Temp[0] < $WinAlt[0]) Then
    Local $AW_L_A = AW_L_A($Temp[0], $WinAlt[0])
    ReDim $Temp[UBound($WinAlt)]
    For $i = 1 To $WinAlt[0]
    If ($WinAltPrue[$i] <> $Temp[$i] And $Temp[$i] <> 'SetItemText' & _GUICtrlListView_GetItemText($Handle_LV_SYS[0], ($i - 1))) Then
    If ($AW_L_A = 0) Then Return (0)
    If _GUICtrlListView_DeleteItem($Handle_LV_SYS[0], ($i - 1)) Then $AW_L_A -= 1
    EndIf
    Next
    Else
    ReDim $ProWinTmp[$j][7]
    $ProWinTmp[0][0] = UBound($ProWinTmp) - 1
    Return $ProWinTmp
    EndIf
    EndFunc ;==>ProcessWinList

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

    Func Win_Alt_Prue($WAP, $HWL, $F_Text)
    For $i = 1 To $WAP[0]
    If ($WAP[$i] = $HWL) Then
    If _GUICtrlListView_SetItemText($Handle_LV_SYS[0], ($i - 1), $F_Text) Then Return True
    EndIf
    Next
    Return False
    EndFunc ;==>Win_Alt_Prue

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

    Func AW_L_A($TP, $WA)
    For $i = 0 To $WA
    If ($TP = $WA) Then Return ($i)
    $TP += 1
    Next
    EndFunc ;==>AW_L_A

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

    Func Prozess_Update()
    Local $Pro_New, $Temp[1]
    Local $Pro_Alt = GetListViewToArray(1)
    Local $Pro_New_List = ProcessList()
    If (UBound($Pro_Alt) - 1 = UBound($Pro_New_List) - 2) Then Return (0)
    _GUICtrlListView_BeginUpdate($Handle_LV_SYS[1])
    For $i = 2 To $Pro_New_List[0][0]
    If BitAND(_ArraySearch($Pro_Alt, $Pro_New_List[$i][0]), @error) Then
    $Pro_New = New_Prozess(0, $Pro_New_List[$i][1], $Error)
    _GUICtrlListView_AddItem($Handle_LV_SYS[1], $Pro_New[0][0], _GUICtrlListView_GetItemCount($Handle_LV_SYS[1]))
    For $e = 1 To UBound($Pro_New, 2) - 1
    _GUICtrlListView_AddSubItem($Handle_LV_SYS[1], _GUICtrlListView_GetItemCount($Handle_LV_SYS[1]) - 1, $Pro_New[0][$e], $e)
    Next
    EndIf
    _ArrayAdd($Temp, $Pro_New_List[$i][0])
    Next
    $Temp[0] = UBound($Temp) - 1
    For $i = 1 To $Pro_Alt[0]
    If BitAND(_ArraySearch($Temp, $Pro_Alt[$i]), @error) Then _GUICtrlListView_DeleteItem($Handle_LV_SYS[1], _ArraySearch($Pro_Alt, $Pro_Alt[$i]) - 1)
    Next
    Return _GUICtrlListView_EndUpdate($Handle_LV_SYS[1])
    EndFunc ;==>Prozess_Update

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

    Func GetListViewToArray($HWnd)
    Local $UB = _GUICtrlListView_GetItemCount($Handle_LV_SYS[$HWnd])
    Local $GCount[$UB + 1]
    Local $GCount_H[$UB + 1]
    $GCount[0] = $UB
    $GCount_H[0] = $UB
    For $i = 1 To $GCount[0]
    $GCount[$i] = _GUICtrlListView_GetItemText($Handle_LV_SYS[$HWnd], ($i - 1))
    If ($HWnd = 0) Then $GCount_H[$i] = _GUICtrlListView_GetItemText($Handle_LV_SYS[$HWnd], ($i - 1), 4)
    Next
    If ($HWnd = 0) Then
    Local $GCount_GCount_H[2]
    $GCount_GCount_H[0] = $GCount
    $GCount_GCount_H[1] = $GCount_H
    Return $GCount_GCount_H
    Else
    Return $GCount
    EndIf
    EndFunc ;==>GetListViewToArray

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

    Func Anw_Prog_P_S()
    Switch _GUICtrlTab_GetCurSel($Tab)
    Case 0
    $iGetIthm = _GUICtrlListView_GetSelectionMark($Handle_LV_SYS[0])
    Switch @GUI_CtrlId
    Case $SYS[0], $Contextmenuitem_0[0]
    If ($iGetIthm > -1) Then
    If (WinClose(_GUICtrlListView_GetItemText($Handle_LV_SYS[0], $iGetIthm), '') = 0) Then
    If (MsgBox(4, 'Die Anwendung konnte nicht geschlossen werden!', 'Zwingen das Fenster zu schließen?') = 6) Then WinKill(_GUICtrlListView_GetItemText($Handle_LV_SYS[0], $iGetIthm), '')
    EndIf
    EndIf
    Case $SYS[1], $Contextmenuitem_0[1]
    If ($iGetIthm > -1) Then WinActivate(_GUICtrlListView_GetItemText($Handle_LV_SYS[0], $iGetIthm), '')
    Case $SYS[2], $MenuItem_0, $Contextmenuitem_0[2]
    Dim $New_Task = FileOpenDialog('Durchsuchen', @DesktopDir, 'Alle (*.*)', 1 + 2, '', $Form[0])
    If @error Then Return (0)
    ShellExecute($New_Task)
    EndSwitch
    Case 1
    $iGetIthm = _GUICtrlListView_GetSelectionMark($Handle_LV_SYS[1])
    Switch @GUI_CtrlId
    Case $SYS[3], $Contextmenuitem_1[1]
    If ($iGetIthm > -1) Then
    Dim $Text = 'Möchten sie "' & _GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm) & '" Beenden?' & @CRLF & @CRLF & _
    'Wenn sie ein geöffnetes Programm diesem Prozess zugeordnet ist, ' & _
    'wird es geschlossen und alle nicht gespeicherten Daten gehen Verloren ' & _
    'Wenn sie ein Systemprozess beenden, kann dieses dazu führen, dass das ' & _
    'System instabil wird. Möchten sie den Vorgang fortsetzen?'
    Dim $PID = ProcessExists(_GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm))
    If ($PID = 0) Then Return MsgBox(4112, 'Fehler', 'Der Process Existiert nicht!')
    If (MsgBox(4, 'Process_Beenden', $Text) = 6) Then
    Dim $P_Clos = ProcessClose($PID)
    Switch @error
    Case 1
    MsgBox(4112, 'Fehler', 'OpenProcess fehlgeschlagen!')
    Case 2
    MsgBox(4112, 'Fehler', 'AdjustTokenPrivileges fehlgeschlagen!')
    Case 3
    MsgBox(4112, 'Fehler', 'TerminateProcess fehlgeschlagen!')
    Case 4
    MsgBox(4112, 'Fehler', 'Es konnte nicht sichergestellt werden, ob der Prozess existiert!')
    EndSwitch
    EndIf
    EndIf
    Case $Contextmenuitem_1[0]
    If ($iGetIthm > -1) Then ShellExecute(StringTrimRight(_GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm, 5), StringLen(_GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm)) + 1))
    Case $Contextmenuitem_1[2]
    If ($iGetIthm > -1) Then
    $Set_Label = _GUICtrlListView_GetItemText($Handle_LV_SYS[1], $iGetIthm)
    GUICtrlSetData($Label, 'Möchten sie die Priorität von "' & $Set_Label & '" ändern?')
    GUISetState(@SW_SHOW, $Form[1])
    EndIf
    Case $Checkbox[0], $Checkbox[1], $Checkbox[2], $Checkbox[3]
    Dim $Set
    Switch GUICtrlRead(@GUI_CtrlId, 1)
    Case 'Niedrig'
    $Set = 0
    Case 'Normal'
    $Set = 2
    Case 'Hoch'
    $Set = 4
    Case 'Echtzeit'; nicht bei Win7
    $Set = 5
    EndSwitch
    ProcessSetPriority($Set_Label, $Set)
    GUISetState(@SW_HIDE, $Form[1])
    EndSwitch
    Case 2
    Dim $ErrHaw
    $iGetIthm = _GUICtrlListView_GetSelectionMark($Handle_LV_SYS[2])
    Switch @GUI_CtrlId
    Case $Contextmenuitem_2[0]
    If ($iGetIthm > -1) Then
    $ErrHaw = _Services_Running(_GUICtrlListView_GetItemText($Handle_LV_SYS[2], $iGetIthm))
    If ($ErrHaw = 'Erfolg') Then _GUICtrlListView_SetItemText($Handle_LV_SYS[2], $iGetIthm, ' Wird ausgeführt ', 5)
    EndIf
    MsgBox(0, '', $ErrHaw)
    Case $Contextmenuitem_2[1]
    If ($iGetIthm > -1) Then
    $ErrHaw = _Services_Stopp(_GUICtrlListView_GetItemText($Handle_LV_SYS[2], $iGetIthm))
    If ($ErrHaw = 'Erfolg') Then _GUICtrlListView_SetItemText($Handle_LV_SYS[2], $iGetIthm, ' Beendet ', 5)
    EndIf
    MsgBox(0, '', $ErrHaw)
    EndSwitch
    EndSwitch
    EndFunc ;==>Anw_Prog_P_S

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

    Func WM_NOTIFY($HWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    Switch $hWndFrom
    Case $Handle_LV_SYS[0], $Handle_LV_SYS[1], $Handle_LV_SYS[2]
    Switch $iCode
    Case $LVN_COLUMNCLICK
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, 'SubItem'))
    EndSwitch
    EndSwitch
    Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func MY_WM_GETMINMAXINFO($HWnd, $Msg, $wParam, $lParam)
    Local $Info_Chek = DllStructCreate('int;int;int;int;int;int;int;int;int;int', $lParam)
    DllStructSetData($Info_Chek, 7, $Breite_K)
    DllStructSetData($Info_Chek, 8, $Hoehe_K)
    DllStructSetData($Info_Chek, 9, $Breite)
    DllStructSetData($Info_Chek, 10, $Hoehe)
    Return
    EndFunc ;==>MY_WM_GETMINMAXINFO

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

    Func WM_SIZE($HWnd, $iMsg, $iwParam, $ilParam)
    Local $aWinPos = WinGetPos($Form[0])
    Local $aParts[3] = [150, ($aWinPos[2] - 100), 50]
    _GUICtrlStatusBar_SetParts($iStatus, $aParts)
    _GUICtrlStatusBar_Resize($iStatus)
    EndFunc ;==>WM_SIZE

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

    Func Com_Fehler()
    Switch $Com_Fehler
    Case 0
    $Error = True
    Case Else
    $Error = False
    EndSwitch
    EndFunc ;==>Com_Fehler

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

    Func Ende()
    _GUICtrlListView_UnRegisterSortCallBack($Handle_LV_SYS[0])
    _GUICtrlListView_UnRegisterSortCallBack($Handle_LV_SYS[1])
    _GUICtrlListView_UnRegisterSortCallBack($Handle_LV_SYS[2])
    Exit
    EndFunc ;==>Ende

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

    Func Form_HIDE()
    GUISetState(@SW_HIDE, @GUI_WinHandle)
    EndFunc ;==>Form_HIDE

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

    Func Form_SHOW()
    GUISetState(@SW_SHOW, @GUI_WinHandle)
    EndFunc ;==>Form_SHOW

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

    While 1 * Sleep(100)
    $mem = MemGetStats()
    _GUICtrlStatusBar_SetText($iStatus, StringFormat('%02d:%02d:%02d', @HOUR, @MIN, @SEC), 2)
    _GUICtrlStatusBar_SetText($iStatus, 'Physikalischer Speicher: ' & $mem[0] & '%', 1)
    WEnd

    [/autoit]

    LG Kleiner