#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

If Not FileExists(@ScriptDir & "\settings.ini") Then
	$hotkey = InputBox("HotKey Auswahl", "Gebe deinen gewünschten HotKey ein")
	IniWrite(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", $hotkey)
Else
	$inihotkey = IniRead(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", "")
EndIf
Global $Show = False
$inihotkey = IniRead(@ScriptDir & "\settings.ini", "Hotkey", "Selected Hotkey", ""); Diese Zeile muss nochmal geschrieben werden, damit auch beim ersten Start gelesen wird.

HotKeySet($inihotkey, "GuiShow")
HotKeySet("{ESC}", "_exit")
;Gui wird erstellt

$gui = GUICreate("TaskManager Light", 226, 522, -3, 1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS))
Global $MenuItem1 = GUICtrlCreateMenu("Menü")
Global $MenuItem2 = GUICtrlCreateMenuItem("Prozess Schließen", $MenuItem1)
Global $MenuItem3 = GUICtrlCreateMenuItem("Prozesse Updaten", $MenuItem1)
Global $ListView1 = GUICtrlCreateListView("", 0, 40, 218, 448, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES))
Global $hListview = GUICtrlGetHandle($ListView1); Handle des Listviews
_GUICtrlListView_InsertColumn($hListview, 0, "Prozesse", 200)
GUISetState(@SW_HIDE);Gui verstecken
_ShowActiveProcesses($ListView1)

Func GuiShow()
	If $Show = False Then
		$Show = True
		GUISetState(@SW_SHOW, $gui)
	Else
		$Show = False
		GUISetState(@SW_HIDE, $gui)
	EndIf
EndFunc   ;==>GuiShow

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $MenuItem2
			_ProcessKill()
		Case $MenuItem3
			_LifeprozessUpdate()
	EndSwitch
	If $Show = True Then
		_LifeprozessUpdate()
		Sleep(100)
	EndIf
WEnd

Func _ShowActiveProcesses($id)
	$lst = ProcessList()
	For $i = 1 To $lst[0][0]
		GUICtrlCreateListViewItem($lst[$i][0], $id)
	Next
EndFunc   ;==>_ShowActiveProcesses

Func _exit()
	Exit
EndFunc   ;==>_exit

Func _ProcessKill()
	$LVItemCount = _GUICtrlListView_GetItemCount($hListview)
	For $i = $LVItemCount To 0 Step -1
		$LVItemGetChecked = _GUICtrlListView_GetItemChecked($hListview, $i)
		If $LVItemGetChecked = True Then
			$PIDName = _GUICtrlListView_GetItemText($hListview, $i)
			ProcessClose($PIDName)
			_GUICtrlListView_DeleteItem($hListview, $i)
		EndIf
	Next
EndFunc   ;==>_ProcessKill



Func _LifeprozessUpdate(); Prog by Raupi
	Local $neueProzesse = ProcessList()
	Local $NeueProzesseTemp[1]
	Local $alteprozesse = _alteprozesse()
	Local $ArraySearch
	If $neueProzesse[0][0]  = Ubound($alteprozesse) Then Return; Wenn Anzahl der Alten Prozesse gleich Anzahl der neuen Prozesse dann Abbruch Update
	For $i = 2 To $neueProzesse[0][0]
		$ArraySearch = _ArraySearch($alteprozesse, $neueProzesse[$i][0])
		If @error Then
			_GUICtrlListView_AddItem($hListView, $neueProzesse[$i][0], _GUICtrlListView_GetItemCount($hListView))
		EndIf
		_ArrayAdd($NeueProzesseTemp, $neueProzesse[$i][0])
	Next
	$NeueProzesseTemp[0] = UBound($NeueProzesseTemp) - 1
	For $i = 1 To $alteprozesse[0]
		_ArraySearch($NeueProzesseTemp, $alteprozesse[$i])
		If @error Then
			$ArraySearch = _ArraySearch($alteprozesse, $alteprozesse[$i])
			_GUICtrlListView_DeleteItem($hListView, $ArraySearch - 1)
		EndIf
	Next
EndFunc   ;==>_LifeprozessUpdate

Func _alteprozesse(); Prog by Raupi
	Local $ItemAnzahl1 = _GUICtrlListView_GetItemCount($hListView)
	Local $prozessListe[$ItemAnzahl1 + 1]
	$prozessListe[0] = $ItemAnzahl1;
	For $i = 1 To $ItemAnzahl1
		$prozessListe[$i] = _GUICtrlListView_GetItemText($hListView, $i - 1, 0)
	Next
	Return $prozessListe;
EndFunc   ;==>_alteprozesse
