Что нового

[Процессы] Инфономайзеры CPU , RAM , Network определённых процессов

NCsoft

Новичок
Сообщения
24
Репутация
0
Версия AutoIt: 3.3.6.1
Описание:

Примечания:

Доброго времени суток !
Хочу сделать для себя , ну и по сути зная что своими руками инфономайзер о запущенных браузерах
Тобиш попробую сообосновать с алгоритмом и попорядку :

В общем по сути программа должна отображать индикаторы загрузки определённых процессов ...
Тоесть к примеру запущен у нас в данный момент 5 браузеров , Опера , ИЕ , Мазила , Хром , Софари
(ну или других программ , типа 1.exe 2.exe 3.exe 4.exe 5.exe)
Программа отображает сколько какой браузер жрёт CPU RAM и коннекта отдачи и приёма
в общем вот арт , по нём суть понять легче о чём я введу топик ...

infonamajjzer.png


Код (сделано только дизайн) , делал через коду
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=f:\Программы\Программирование\autoit v.3\koda_1.7.3.0\forms\form1.kxf
$Form1_1 = GUICreate("Инфонамайзер", 117, 596, 694, 224, -1, $WS_EX_TOOLWINDOW)
$Group1 = GUICtrlCreateGroup(" Opera ", 5, 5, 107, 107)
$Label1 = GUICtrlCreateLabel("CPU : ", 16, 24, 35, 17)
$Label2 = GUICtrlCreateLabel("10%", 56, 24, 24, 17)
$Label3 = GUICtrlCreateLabel("RAM :", 16, 40, 34, 17)
$Label4 = GUICtrlCreateLabel("4%", 56, 40, 18, 17)
$Label5 = GUICtrlCreateLabel("RAM :", 16, 56, 34, 17)
$Label6 = GUICtrlCreateLabel("1024 MB", 56, 56, 47, 17)
$Label7 = GUICtrlCreateLabel("NET Out :", 16, 72, 52, 17)
$Label8 = GUICtrlCreateLabel("50 KB", 72, 72, 33, 17)
$Label9 = GUICtrlCreateLabel("NET In :", 16, 88, 44, 17)
$Label10 = GUICtrlCreateLabel("1024 KB", 64, 88, 45, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(" Chrome ", 5, 117, 107, 107)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup(" Mozzila ", 5, 229, 107, 107)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup(" IE ", 5, 341, 107, 107)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup(" Safari ", 5, 453, 107, 107)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Close All", 5, 565, 107, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd


Данный форум обшарил весь , но до ума склееть всё так и не получилось , в этоге психанул , и решил обратиться за помощью
(Сори за ошибки , в браузере орфография пропала :-\ , так что читать наверное сложновато прийдёться)

Думаю софтик будет полезный не только для меня
Знаю есть много других ПО , но не хочу , хочу что-то наших рук !
 

Mur

Осваивающий
Сообщения
132
Репутация
32
https://sites.google.com/site/ascend4ntscode/processfunctions
: Returns information on Memory usage of the Process
На этой же странице, когда будете читать, ссылка на PDH Performance Counters UDF (Считает трафик\загруженность процессора).
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Mur
Mur сказал(а):
PDH Performance Counters UDF
Если не ошибаюсь, то там идет счет лишь общего трафика соединения. Если честно, то я не знаю как его считать для определенного процесса.


Поскольку новая опера на движке хрома, а хром имеет привычку распространять себя на отдельные процессы - то считать нужно информацию из всех процессов.
6H3b8.png


Код:
#Include <ButtonConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
#Include <Array.au3>

Local $hGui, $iListView, $Idx
Global $aProcessList[99][4] = [[0]]

Local $aGlobalMem = MemGetStats()
Local $hTimer = TimerInit(), $iRefreshInterval = 1 * 1000
; ---
$hGui = GUICreate( "Инфонамайзер", 420, 140, -1, -1, 0x94CB00CC, 0x00050181 )
$iListView = GUICtrlCreateListView( "Process|CPU|RAM|Net Out|Net In", 5, 5, 410, 130 )
	GUICtrlSendMsg( $iListView, 0x101E, 0, 90 )
	GUICtrlSendMsg( $iListView, 0x101E, 2, 100 )
	GUICtrlSendMsg( $iListView, 0x101E, 3, 80 )
	GUICtrlSendMsg( $iListView, 0x101E, 4, 80 )

; ---
__AddProcess( "explorer.exe" )
; ---

GUISetState()
Do
	If TimerDiff( $hTimer ) >= $iRefreshInterval Then
		For $Idx = 1 To $aProcessList[0][0] Step 1
			__RefreshInfo( $Idx )
		Next
		$hTimer = TimerInit()
	EndIf
	; ---
	If GUIGetMsg() = -3 Then ExitLoop
	Sleep( 20 )
Until False


Func __AddProcess( $sProcName )
	Local $Idx, $iPid, $vTime1, $vTime2
	; ---
	For $Idx = 1 To $aProcessList[0][0] Step 1
		If $sProcName <> $aProcessList[$Idx][0] Then ContinueLoop
		ExitLoop
	Next
	If $Idx < $aProcessList[0][0] + 1 Then _
		Return SetError( 1, 0, False ) ; << Уже добавлен

	$iPid = ProcessExists( $sProcName )
	If Not $iPid Then _
		Return SetError( 2, 0, False ) ; << Нет процесса
	; ---
	$Idx = $aProcessList[0][0] + 1
	$aProcessList[0][0] = $Idx
	$aProcessList[$Idx][0] = $sProcName
	$aProcessList[$Idx][1] = GUICtrlCreateListViewItem( $sProcName, $iListView )
	$aProcessList[$Idx][2] = 0 ;SystemTimes
	$aProcessList[$Idx][3] = 0 ;ProcessTimes

	__RefreshInfo( $Idx )
EndFunc

Func __RefreshInfo( $iIndex )
	Local $aList, $vMem, $Idx, $vTime1, $vTime2, $aTmp[4] = [ 0, 0, 0, 0 ]
	; ---
	$aList = ProcessList( $aProcessList[$iIndex][0] )
	For $Idx = 1 To $aList[0][0] Step 1
		$vTime1 = _WinAPI_GetSystemTimes()
		$vTime2 = _WinAPI_GetProcessTimes( $aList[$Idx][1] )
		If IsArray( $vTime1 ) And IsArray( $vTime2 ) Then
			$vTime1 = $vTime1[1] + $vTime1[2]
			$vTime2 = $vTime2[1] + $vTime2[2]

			If $aProcessList[$iIndex][2] And $aProcessList[$iIndex][3] Then
				$aTmp[0] += Round(($vTime2 - $aProcessList[$iIndex][3]) / ($vTime1 - $aProcessList[$iIndex][2]) * 100)

				$vMem = _WinAPI_GetProcessMemoryInfo( $aList[$Idx][1] )
				$aTmp[1] += $vMem[9]
			EndIf

			$aProcessList[$iIndex][2] = $vTime1
			$aProcessList[$iIndex][3] = $vTime2
		Else
			$aProcessList[$iIndex][2] = 0
			$aProcessList[$iIndex][3] = 0
		EndIf
	Next
	$aTmp[1] = Round( $aTmp[1] / 1024, 1 )
	$vMem = Round( $aTmp[1] / $aGlobalMem[1] * 100, 1 ) & " %"
	; ---
	Local $sFinal = $aProcessList[$iIndex][0] & "|" & $aTmp[0] & " %|" & __FormatSize( $aTmp[1] ) & " (" & $vMem & ")"

	GUICtrlSetData( $aProcessList[$iIndex][1], $sFinal )
EndFunc

Func __FormatSize($iSize)
    Select
        Case $iSize > 999
            Return Round($iSize / 1024, 1) & " MB"
        Case Else
            Return $iSize & " KB"
    EndSelect
EndFunc   ;==>_FormatFileSize


Счетчик загруженности процесса сделал на примере Yashied'а.
 
Верх