Windows - Processzorhasználat mérése szkriptekből

forráskód letöltése
Számos program létezik a processzor terheltségének mérésére, de vajon sajátunkba hogy tudunk ilyen funkciót beépíteni? A megoldás a WMI (Windows Management Instrumentation) szolgáltatásban - Windows XP-től kezdve - található meg, egy teljesítményszámláló formájában. A WMI osztály szkriptből is elérhető, amit viszont bármilyen programba vagy weboldalba beépíthetünk...
Cikkünkhöz mellékeltük az alábbiakban szereplő szkriptet "CPUUsage.vbs" néven. Futtatása után kiírja, hogy pillanatnyilag hány szálat futtat a processzor és hány százalékos a terheltsége.
A teljesítményszámláló objektumok az operációs rendszer adatátviteli pontjait mérik, és megadott időközönként szolgáltatnak információt az alkalmazások felé. Programokból, szkriptekből elérhető az összes számláló, ezt kihasználva készíthetünk egy VBScript-et a processzor terheltségének megjelenítésére.
A mérést végző kódot egy függvénybe helyezzük, hogy könnyebb legyen beépíteni és meghívni más szkriptekből.
Wscript.echo "Processzorhasználat: " & chr(13) & chr(10) & CPUUsage()
Function CPUUsage()
Létrehozunk egy segédváltozót az átmeneti adatok tárolására.
 temp = 0
A WMI és az alkalmazások között a "winmgmts" interfész teremti meg a kapcsolatot. A számlálóobjektumokat kezelő osztályok az alapértelmezett root\cimv2 névtérben találhatók.
 Set WMI = GetObject("winmgmts:root\cimv2")
Az "SWbemRefresher" objektum egy konténer, mely képes folyamatosan frissíteni a hozzáadott adatokat.
 Set refresher = CreateObject("WbemScripting.SWbemRefresher")
Az "AddEnum" metódusával lehet hozzáadni új objektumot, jelen esetben a "Win32_PerfFormattedData_PerfProc_Process" számlálót, mely a processzor információt tárolja. A "Refresh" metódussal lehet frissíteni az objektumadatokat.
 Set wmiWin32Objects = refresher.AddEnum (WMI,"Win32_PerfFormattedData_PerfProc_Process").ObjectSet
 refresher.Refresh()
 refresher.Refresh()
A processzorhasználattól függően a "Win32_PerfFormattedData_PerfProc_Process" objektum "Name" tulajdonsága felvesz bizonyos értékeket (idle, total, stb.). Ellenőrizzük ezeket és tároljuk el a "temp" segédváltozóba a használatot százalékban (PercentProcessorTime) mutató tulajdonság tartalmát.
 For Each wmiWin32Object In wmiWin32Objects
  If wmiWin32Object.name <> "Idle" Then
   If wmiWin32Object.name <> "_Total" Then
    If wmiWin32Object.name <> "Client" Then
     If CInt(wmiWin32Object.PercentProcessorTime) > CInt(temp) Then
     temp = CInt(wmiWin32Object.PercentProcessorTime)
A függvény visszatérési értéke (CPUUsage) legyen az aktuálisan aktív szálak (thread) száma. Ennyivel dolgozik pillanatnyilag a CPU. Majd adjuk hozzá a használati százalékot is.
     CPUUsage = wmiWin32Object.ThreadCount & " szál / " & wmiWin32Object.PercentProcessorTime & "% terheltség"
     End If
    End If
   End If
  End If
 Next
Ha nulla százalékos a kihasználtság, akkor az "Idle" értéket adjuk meg visszatérési értékként, végül zárjuk a függvényt.
 If temp = 0 Then
 CPUUsage = "Idle"
 End If
End Function