Hallo Leute,
baue grade an nem Taskmanager, funktioniert soweit auch ganz gut aber bei der prozessübersicht tritt der fehler auf das einträge verschoben sind zb passt der eintrag bei path name nicht zu dem prozess namen.
hier mein main script:
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <Date.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <Funcs.au3>
#include <WinAPIEx.au3>
#include <Process.au3>
Global $tmpUsage = _GetCPUUsage()
Global $CPU_RegName = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")
Global $CPU_RegClock = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz") & " MHz"
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate("Taskmanager by k!llax2x", 720, 372, 275, 111, -1, $WS_EX_TOOLWINDOW)
GUISetBkColor(0xF0F0F0)
$t = GUICtrlCreateTab(8, 8, 705, 337)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUICtrlCreateTabItem("Processes")
$lv1 = GUICtrlCreateListView("Process Name|PID|Process Creation Time|Process State|User|Process Path", 16, 40, 690, 294)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 40)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 130)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 83)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 84)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 5, 231)
GUICtrlCreateTabItem("Applications")
$lv2 = GUICtrlCreateListView("Window Name|Window Handle|Window Process|Window Process ID", 16, 40, 690, 294)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 290)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 129)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 120)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 147)
GUICtrlCreateTabItem("Usage Overview")
GUICtrlCreateGroup("CPU Usage", 24, 40, 329, 297)
$cpu1 = GUICtrlCreateProgress(32, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 1", "CPU 1 Progressbar", 1)
$cpu2 = GUICtrlCreateProgress(72, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 2", "CPU 2 Progressbar", 1)
$cpu3 = GUICtrlCreateProgress(112, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 3", "CPU 3 Progressbar", 1)
$cpu4 = GUICtrlCreateProgress(152, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 4", "CPU 4 Progressbar", 1)
$cpu5 = GUICtrlCreateProgress(192, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 5", "CPU 5 Progressbar", 1)
$cpu6 = GUICtrlCreateProgress(232, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 6", "CPU 6 Progressbar", 1)
$cpu7 = GUICtrlCreateProgress(272, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 7", "CPU 7 Progressbar", 1)
$cpu8 = GUICtrlCreateProgress(312, 80, 30, 113)
GUICtrlSetTip(-1, "Show the current CPU Usage from CPU 8", "CPU 8 Progressbar", 1)
GUICtrlCreateLabel("CPU1", 32, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU2", 72, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU3", 112, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU4", 152, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU5", 192, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU6", 232, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU7", 272, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU8", 312, 64, 32, 17, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("CPU Information", 32, 200, 81, 17)
GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
$cpuProg = GUICtrlCreateProgress(40, 224, 54, 105, $PBS_VERTICAL)
GUICtrlSetTip(-1, "Show the current CPU Usage of all CPUs", "CPU Progressbar", 1)
GUICtrlCreateLabel("Processor Name", 120, 224, 77, 17)
GUICtrlCreateLabel("Processor Clock", 120, 256, 77, 17)
GUICtrlCreateLabel("Processors", 120, 288, 56, 17)
$CPU_Name = GUICtrlCreateLabel($CPU_RegName, 120, 240, 220, 17, -1, $WS_EX_CLIENTEDGE)
$CPU_Clock = GUICtrlCreateLabel($CPU_RegClock, 120, 272, 220, 17, $SS_CENTER, $WS_EX_CLIENTEDGE)
$CPU_S = GUICtrlCreateLabel($tmpUsage[0], 120, 304, 220, 17, $SS_CENTER, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("Memory Usage", 360, 40, 345, 297)
$memProg = GUICtrlCreateProgress(368, 80, 326, 33, $PBS_SMOOTH)
GUICtrlSetTip(-1, "Show the current RAM Usage", "RAM Progressbar", 1)
$ram = GUICtrlCreateLabel("RAM (100%)", 368, 64, 63, 17)
GUICtrlCreateLabel("Physical Memory(MB)", 368, 120, 105, 17)
GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
GUICtrlCreateLabel("Total:", 368, 136, 31, 17)
GUICtrlCreateLabel("Available:", 368, 152, 50, 17)
GUICtrlCreateLabel("Cached:", 368, 168, 44, 17)
GUICtrlCreateLabel("Free:", 368, 184, 28, 17)
GUICtrlCreateLabel("Kernel Memory(MB)", 368, 208, 96, 17)
GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
GUICtrlCreateLabel("Paged:", 368, 224, 38, 17)
GUICtrlCreateLabel("Nonpaged:", 368, 240, 57, 17)
GUICtrlCreateLabel("System", 368, 264, 38, 17)
GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
GUICtrlCreateLabel("Handles", 368, 280, 43, 17)
GUICtrlCreateLabel("Threads", 368, 296, 43, 17)
GUICtrlCreateLabel("Processes", 368, 312, 53, 17)
$pm_total = GUICtrlCreateLabel("", 632, 136, 44, 17)
$pm_av = GUICtrlCreateLabel("", 632, 152, 36, 17)
$pm_chac = GUICtrlCreateLabel("", 632, 168, 48, 17)
$pm_free = GUICtrlCreateLabel("", 632, 184, 42, 17)
$km_page = GUICtrlCreateLabel("", 632, 224, 48, 17)
$km_nonpa = GUICtrlCreateLabel("", 632, 240, 54, 17)
$sys_handle = GUICtrlCreateLabel("", 632, 280, 57, 17)
$sys_threads = GUICtrlCreateLabel("", 632, 296, 60, 17)
$sys_process = GUICtrlCreateLabel("", 632, 312, 62, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateTabItem("")
$mi1 = GUICtrlCreateMenu("&Data")
$execute = GUICtrlCreateMenuItem("Execute...", $mi1)
$end = GUICtrlCreateMenuItem("End Taskmanager", $mi1)
GUISetState(@SW_SHOW)
_FillProcessList()
_FillWindowList()
_GetRAMInfos()
AdlibRegister("_FillProcessList", 20000)
AdlibRegister("_FillWindowList", 10000)
AdlibRegister("_GetRAMInfos", 1000)
AdlibRegister("_UpdateCPU_Progressbars")
While True
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $execute
FileOpenDialog("Select File", @HomeDrive, "Executable(*.exe)")
Case $end
Exit
EndSwitch
WEnd
Func _FillWindowList()
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lv2))
Local $WindowList = WinList()
Local $WindowListItems = _GUICtrlListView_GetItemCount($lv2)
Local $k = 0
For $x = 1 To $WindowList[0][0]
[/autoit] [autoit][/autoit] [autoit]If $WindowList[$x][0] <> "" And IsVisible($WindowList[$x][1]) Then
_GUICtrlListView_AddItem($lv2, $WindowList[$x][0], _GUICtrlListView_GetItemCount($lv2))
$Executable = _WinAPI_GetProcessFileName(WinGetProcess($WindowList[$x][1]))
$IconAnzahl = _GetIconCount($Executable)
If $IconAnzahl = 0 Then
GUICtrlSetImage($lv2, "icon.ico")
Else
GUICtrlSetImage($lv2, $Executable)
EndIf
If $WindowListItems = 1 Then
$winPID = WinGetProcess($WindowList[$x][1])
_GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$x][1], 1)
_GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
Else
$k = $k + 1
$winPID = WinGetProcess($WindowList[$x][1])
_GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$x][1], 1)
_GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
EndIf
EndIf
Next
#cs
For $i = 1 To $WindowList[0][0]
If $WindowListItems = 1 Then
$winPID = WinGetProcess($WindowList[$i][1])
_GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$i][1], 1)
_GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
Else
$k = $k + 1
$winPID = WinGetProcess($WindowList[$i][1])
_GUICtrlListView_AddSubItem($lv2, $k, $WindowList[$i][1], 1)
_GUICtrlListView_AddSubItem($lv2, $k, $winPID, 2)
EndIf
Next
#ce
EndFunc ;==>_FillWindowList
Func _FillProcessList()
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lv1))
Local $processList = ProcessList()
Local $processListItems = _GUICtrlListView_GetItemCount($lv1)
Local $k = 0
For $x = 0 To $processList[0][0]
_GUICtrlListView_AddItem($lv1, "", _GUICtrlListView_GetItemCount($lv1))
$AndwendungsPfad = _WinAPI_GetProcessFileName($processList[$x][1])
[/autoit] [autoit][/autoit] [autoit]$IconAnzahl = _GetIconCount($AndwendungsPfad)
If $IconAnzahl = 0 Then
GUICtrlSetImage($lv1, "icon.ico")
Else
GUICtrlSetImage($lv1, $AndwendungsPfad)
EndIf
Next
For $i = 0 To $processList[0][0]
If $processListItems = 1 Then
_GUICtrlListView_AddSubItem($lv1,$k,$processList[$i][0],0)
_GUICtrlListView_AddSubItem($lv1, $k, $processList[$i][1], 1)
_GUICtrlListView_AddSubItem($lv1, $k, _ProcessTime($processList[$i][1]), 2)
_GUICtrlListView_AddSubItem($lv1, $k, "running", 3)
If _WinAPI_GetProcessUser($processList[$i][1]) = 0 Then _GUICtrlListView_AddSubItem($lv1, $k, @UserName, 4)
_GUICtrlListView_AddSubItem($lv1, $k, _WinAPI_GetProcessFileName($processList[$i][1]), 5)
Else
$k = $k + 1
_GUICtrlListView_AddSubItem($lv1,$k,$processList[$i][0],0)
_GUICtrlListView_AddSubItem($lv1, $k, $processList[$i][1], 1)
_GUICtrlListView_AddSubItem($lv1, $k, _ProcessTime($processList[$i][1]), 2)
_GUICtrlListView_AddSubItem($lv1, $k, "running", 3)
If _WinAPI_GetProcessUser($processList[$i][1]) = 0 Then _GUICtrlListView_AddSubItem($lv1, $k, @UserName, 4)
_GUICtrlListView_AddSubItem($lv1, $k, _WinAPI_GetProcessFileName($processList[$i][1]), 5)
EndIf
Next
EndFunc ;==>_FillProcessList
[/autoit] [autoit][/autoit] [autoit]Func _GetRAMInfos()
Local $Data = _WinAPI_GetPerformanceInfo()
;Physical Memory
GUICtrlSetData($pm_total, Floor($Data[3] / 1024 / 1024))
GUICtrlSetData($pm_av, Floor($Data[4] / 1024 / 1024))
GUICtrlSetData($pm_chac, Floor($Data[5] / 1024 / 1024))
GUICtrlSetData($pm_free, Floor($Data[6] / 1024 / 1024))
;Kernel Memory
GUICtrlSetData($km_page, Floor($Data[7] / 1024 / 1024))
GUICtrlSetData($km_nonpa, Floor($Data[8] / 1024 / 1024))
;System
GUICtrlSetData($sys_handle, $Data[10])
GUICtrlSetData($sys_process, $Data[11])
GUICtrlSetData($sys_threads, $Data[12])
EndFunc ;==>_GetRAMInfos
Func _UpdateCPU_Progressbars()
Local $usage = _GetCPUUsage()
Local $MemUsage = MemGetStats()
GUICtrlSetData($cpuProg, $usage[1])
GUICtrlSetData($memProg, $MemUsage[0])
GUICtrlSetData($ram, "RAM (" & $MemUsage[0] & "%)")
EndFunc ;==>_UpdateCPU_Progressbars
Hier meine Funktionen:
Spoiler anzeigen
;Functions for Taskmgr
#include-once
Func _ProcessTime($pid)
Local $aFT, $tFT, $tST
If $pid > 0 Then
$aFT = _WinAPI_GetProcessTimes($pid)
If IsArray($aFT) Then
$tFT = _Date_Time_FileTimeToLocalFileTime(DllStructGetPtr($aFT[0]))
$tST = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($tFT))
Return _WinAPI_GetTimeFormat(0, $tST)
EndIf
EndIf
EndFunc ;==>_ProcessTime
Func _GetIconCount($sFilename)
Local $iCount = DllCall("Shell32", "int", "ExtractIconEx", "str", $sFilename, "int", -1, "ptr", 0, "ptr", 0, "int", 1)
If Not @error Then Return $iCount[0]
Return 0
EndFunc ;==>_GetIconCount
Func _GetCPUUsage()
Local Const $SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = 8
Local Const $SYSTEM_TIME_INFO = 3
Local Const $tagS_SPPI = "int64 IdleTime;int64 KernelTime;int64 UserTime;int64 DpcTime;int64 InterruptTime;long InterruptCount"
Local $CpuNum, $IdleOldArr[1], $IdleNewArr[1], $tmpStruct
Local $timediff = 0, $starttime = 0
Local $S_SYSTEM_TIME_INFORMATION, $S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
Local $RetArr[1]
Local $S_SYSTEM_INFO = DllStructCreate("ushort dwOemId;short wProcessorArchitecture;dword dwPageSize;ptr lpMinimumApplicationAddress;" & _
"ptr lpMaximumApplicationAddress;long_ptr dwActiveProcessorMask;dword dwNumberOfProcessors;dword dwProcessorType;dword dwAllocationGranularity;" & _
"short wProcessorLevel;short wProcessorRevision")
;Anzahl der CPUs bestimmen
$err = DllCall("Kernel32.dll", "none", "GetSystemInfo", "ptr", DllStructGetPtr($S_SYSTEM_INFO))
If @error Or Not IsArray($err) Then ;Fehler beim 1. Dll Aufruf
Return $RetArr[0] = -1
Else
$CpuNum = DllStructGetData($S_SYSTEM_INFO, "dwNumberOfProcessors")
ReDim $RetArr[$CpuNum + 1]
$RetArr[0] = $CpuNum
EndIf
$S_SYSTEM_INFO = 0
While 1
;Erstellen der Struktur für die Prozessor Performance
$S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = DllStructCreate($tagS_SPPI)
;Größe Struktur um später vielfache (MultiCore) der Structur lesen zu können
$StructSize = DllStructGetSize($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
;Erstellen einer Pufferstruktur
$S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = DllStructCreate("byte puffer[" & $StructSize * $CpuNum & "]")
;Pointer zum wiederfinden
$pointer = DllStructGetPtr($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)
$err = DllCall("ntdll.dll", "int", "NtQuerySystemInformation", _
"int", $SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, _
"ptr", DllStructGetPtr($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION), _
"int", DllStructGetSize($S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION), _
"int", 0)
;Fehler beim 2. Dll Aufruf
If $err[0] Then
Return $RetArr[0] = -2
EndIf
;Struktur und Dll-Aufruf für Zeitmessung
Local $S_SYSTEM_TIME_INFORMATION = DllStructCreate("int64;int64;int64;uint;int")
$err = DllCall("ntdll.dll", "int", "NtQuerySystemInformation", _
"int", $SYSTEM_TIME_INFO, _
"ptr", DllStructGetPtr($S_SYSTEM_TIME_INFORMATION), _
"int", DllStructGetSize($S_SYSTEM_TIME_INFORMATION), _
"int", 0)
;Fehler beim 3. Dll Aufruf
If $err[0] Then
Return $RetArr[0] = -3
EndIf
If $starttime = 0 Then ;Startwerte Ermitteln
ReDim $IdleOldArr[$CpuNum]
;Start-Informationen Auslesen
For $i = 0 To $CpuNum - 1
$tmpStruct = DllStructCreate($tagS_SPPI, $pointer + $i * $StructSize)
$IdleOldArr[$i] = DllStructGetData($tmpStruct, "IdleTime")
Next
;Startzeit ermitteln
$starttime = DllStructGetData($S_SYSTEM_TIME_INFORMATION, 2)
;Verzögerung um einen Zeitunterschied sicher zu stellen
Sleep(500)
Else
ReDim $IdleNewArr[$CpuNum]
;Neue Informationen auslesen
For $i = 0 To $CpuNum - 1
$tmpStruct = DllStructCreate($tagS_SPPI, $pointer + $i * $StructSize)
$IdleNewArr[$i] = DllStructGetData($tmpStruct, "IdleTime")
Next
;Zeitdifferenze in 100 nanosekunden
$timediff = DllStructGetData($S_SYSTEM_TIME_INFORMATION, 2) - $starttime
;Auslastung errechnen
For $i = 0 To $CpuNum - 1
$RetArr[$i + 1] = Round(100 - (($IdleNewArr[$i] - $IdleOldArr[$i]) * 100 / $timediff))
Next
Return $RetArr
EndIf
;Speicher wieder frei geben
$S_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION = 0
$S_SYSTEM_TIME_INFORMATION = 0
$tmpStruct = 0
WEnd
EndFunc ;==>_GetCPUUsage
Func _ProcessSuspend($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ai_Handle[0])
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
EndIf
Else
SetError(2)
Return 0
EndIf
EndFunc ;==>_ProcessSuspend
Func _ProcessResume($process)
$processid = ProcessExists($process)
If $processid Then
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
$i_sucess = DllCall("ntdll.dll", "int", "NtResumeProcess", "int", $ai_Handle[0])
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
If IsArray($i_sucess) Then
Return 1
Else
SetError(1)
Return 0
EndIf
Else
SetError(2)
Return 0
EndIf
EndFunc ;==>_ProcessResume
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc
Func _GetPathByPid($iPID); gefunden im Englischen Forum , verfasser nicht bekannt.
Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', 0x0410, 'int', 0, 'int', $iPID)
If $aProc[0] = 0 Then Return SetError(1, 0, '')
Local $vStruct = DllStructCreate('int[1024]')
DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameExW', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'wstr', '', 'int', 2048)
If $aReturn[0] = 0 Then Return SetError(2, 0, '')
Return $aReturn[3]
EndFunc
desweiteren braucht man die WinAPIEx.au3:
Spoiler anzeigen
hoffe auf hilfe mfg killax2x