CPU-Auslastung via WMI auslesen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

CPU-Auslastung via WMI auslesen

Beitrag von Kiffi »

ein einfacher Code, um die CPU-Auslastung mittels WMI auszulesen:

Code: Alles auswählen

EnableExplicit

Define VbScript.s
Define VBS
Define Xml.s

VbScript = "Set objWMIService = GetObject(''winmgmts:\\localhost\root\CIMV2'')" + #CRLF$ + 
           "Set CPUInfo = objWMIService.ExecQuery(''SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor'',,48)" + #CRLF$ + 
           "Output = ''<list>''" + #CRLF$ + 
           "For Each Item in CPUInfo" + #CRLF$ + 
           "  Output = Output & ''<element>'' & Item.PercentProcessorTime & ''</element>''" + #CRLF$ + 
           "Next" + #CRLF$ + 
           "Output = Output & ''</list>''" + #CRLF$ + 
           "WScript.StdOut.Writeline Output" + #CRLF$

VbScript = ReplaceString(VbScript, "''", Chr(34))

CreateFile(0, GetTemporaryDirectory() + "cpuinfo.vbs")
WriteString(0, VbScript)
CloseFile(0)

VBS = RunProgram("wscript", GetTemporaryDirectory() + "cpuinfo.vbs", "", #PB_Program_Open | #PB_Program_Read)

If VBS
  Xml = ReadProgramString(VBS)
  CloseProgram(VBS)
Else
  Debug "!RunProgram"
EndIf

If ParseXML(0, Xml) And XMLStatus(0) = #PB_XML_Success
  NewList Value.s()
  ExtractXMLList(MainXMLNode(0), Value())
  FreeXML(0)
  ForEach Value()
    Debug "PercentProcessorTime: " + Value()
  Next
Else
  Debug XMLError(0)
EndIf
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: CPU-Auslastung via WMI auslesen

Beitrag von NicTheQuick »

Deinen String kannst du jetzt auch einfacher schreiben:

Code: Alles auswählen

Define.s VbScript
VbScript = ~"Set objWMIService = GetObject(\"winmgmts:\\\\localhost\\root\\CIMV2\")\r\n" +
           ~"Set CPUInfo = objWMIService.ExecQuery(\"SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor\",,48)\r\n" +
           ~"Output = \"<list>\"\r\n" +
           ~"For Each Item in CPUInfo\r\n" +
           ~"  Output = Output & \"<element>\" & Item.PercentProcessorTime & \"</element>\"\r\n" +
           ~"Next\r\n" +
           ~"Output = Output & \"</list>\"\r\n" +
           ~"WScript.StdOut.Writeline Output\r\n"
Debug VbScript
:wink:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: CPU-Auslastung via WMI auslesen

Beitrag von RSBasic »

:allright:

Aber wenn man den Code nutzen möchte, dann unbedingt prüfen, ob die Ausführung von Scripten erfolgreich war oder ob diese vom Benutzer oder von Sicherheitsrichtlinien deaktiviert wurde.
Es gibt Unternehmen oder Privatpersonen, die solche Scripte nicht zulassen.

Schade, dass PB nativ kein WMI kann. Vielleicht irgendwann. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: CPU-Auslastung via WMI auslesen

Beitrag von Kiffi »

@NicTheQuick: Weiß ich. Ich finde meine Version aber lesbarer. ;-)
RSBasic hat geschrieben:Schade, dass PB nativ kein WMI kann. Vielleicht irgendwann. :)
nie und nimmer. Da können (gefühlte) 95% aller PB-User noch so bitten und betteln. :(

Grüße ... Peter
a²+b²=mc²
Antworten