#include <WinAPISys.au3>
#include <WinAPIProc.au3>
While Sleep(111)
$aUse = _ProcessListUsage("chrome.exe")
For $i = 1 To $aUse[0][0]
If $aUse[$i][2] >= 40 Then ProcessClose($aUse[$i][1])
Next
WEnd
; -----------------------------------------------------------------
; Параметры: $Name - имя процесса (по умолчанию все процессы)
; $Period - время расчёта загрузки (по умолчанию 500 мс)
; Возвращает: массив
; Array[0][0] - количество процессов
; Array[n][0] - имя процесса
; Array[n][1] - идентификатор процесса
; Array[n][2] - процент загрузки
; -----------------------------------------------------------------
Func _ProcessListUsage($Name = Default, $Period = Default)
Local $aErr[1][3], $aList = ($Name = Default) ? ProcessList() : ProcessList($Name)
If @error Or Not $aList[0][0] Then Return SetError(1, 0, $aErr)
If $Period = Default Then $Period = 500
Local $aPrev[UBound($aList)], $aTime[UBound($aList)]
Local $PrevProc, $PrevSys, $TimeProc, $TimeSys
$PrevSys = _WinAPI_GetSystemTimes()
If Not @error Then $PrevSys = $PrevSys[1] + $PrevSys[2]
For $i = 1 To $aList[0][0]
$PrevProc = _WinAPI_GetProcessTimes($aList[$i][1])
If Not @error Then $aPrev[$i] = $PrevProc[1] + $PrevProc[2]
Next
Sleep($Period)
$TimeSys = _WinAPI_GetSystemTimes()
If Not @error Then $TimeSys = $TimeSys[1] + $TimeSys[2]
For $i = 1 To $aList[0][0]
$TimeProc = _WinAPI_GetProcessTimes($aList[$i][1])
If Not @error Then $aTime[$i] = $TimeProc[1] + $TimeProc[2]
Next
ReDim $aList[UBound($aList)][3]
For $i = 1 To $aList[0][0]
$aList[$i][2] = Round(($aTime[$i] - $aPrev[$i]) / ($TimeSys - $PrevSys) * 100)
Next
Return $aList
EndFunc