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
#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>
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Opt('WinTitleMatchMode', 3)
$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
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'
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']
Global Static $objRefresher = ObjCreate('WbemScripting.SWbemRefresher')
Global Static $objRefreshableItem = $objRefresher.AddEnum(ObjGet('winmgmts:\\' & @ComputerName & '\root\CIMV2'), 'Win32_PerfFormattedData_PerfOS_Processor')
$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]
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
$Form[$Null] = GUICreate('Task_Manager v0.1', 870, 460, (@DesktopWidth - 870) / 2, (@DesktopHeight - 460) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS)
GUISetOnEvent(-3, 'Ende')
$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')
$Tab = GUICtrlCreateTab(10, 8, 850, 400)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
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')
$Icon = _GUIImageList_Create(16, 16, 5)
_GUICtrlListView_SetImageList($Handle_LV_SYS[$Null], $Icon, 1)
For $i = $Null To 6
_GUICtrlListView_AddColumn($Handle_LV_SYS[$Null], $Bezeichnung_0[$i][$Null], $Bezeichnung_0[$i][1])
Next
$aWinList = StartCallback()
If @error Then ErrorExit()
$aProcess = New_Prozess(1, '', '')
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
$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')
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')
For $i = $Null To 7
_GUICtrlListView_AddColumn($Handle_LV_SYS[1], $Bezeichnung_1[$i], 100)
Next
$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
$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')
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')
For $i = $Null To 9
_GUICtrlListView_AddColumn($Handle_LV_SYS[2], $Bezeichnung_2[$i], 100)
Next
$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
GUICtrlCreateTabItem('')
$iStatus = _GUICtrlStatusBar_Create($Form[$Null])
_GUICtrlStatusBar_SetParts($iStatus, $iParts)
$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')
$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')
$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()
$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])
$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
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])
AdlibRegister('Update', 1000)
GUIRegisterMsg($WM_SIZE, 'WM_SIZE')
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUIRegisterMsg(0x0024, 'MY_WM_GETMINMAXINFO')
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
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
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
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
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
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
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
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
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
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
Func ErrorExit()
MsgBox(4112, 'Error', 'Anfrage ist Fehlgeschlagen Programm wird Beemdet!', 5)
Exit
EndFunc ;==>ErrorExit
Func Ende()
If _WinSetTrans($Null) Then Exit
EndFunc ;==>Ende
Func Form_HIDE()
If GUISetState(@SW_HIDE, @GUI_WinHandle) Then _WinSetTrans(1)
EndFunc ;==>Form_HIDE
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
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
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
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
#include <System.au3>
Spoiler anzeigen
Global Static $obWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2')
Global $Com_Fehler = ObjEvent('AutoIt.Error', 'Com_Fehler')
Global $Error = False
Global $i = 0
Global $Max = 255
Global $aDFL[$Max][5], $DCN, $GWMFN, $Cont = 1
Global $Not_Klassenname = 'Button|Progman|DV2ControlHost|Desktop User Picture|tooltips_class32'
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
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
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
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
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
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
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
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
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
Func IIF($V_Expr, $F_True = True, $F_False = False)
If $V_Expr Then Return $F_True
Return $F_False
EndFunc ;==>IIF
Func IsMissing(Const $iData)
Return (Not $iData)
EndFunc ;==>IsMissing
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
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
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
Func Com_Fehler()
Switch $Com_Fehler
Case 0
$Error = True
Case Else
$Error = False
EndSwitch
EndFunc ;==>Com_Fehler
LG Kleiner