Seite 1 von 1

CPU-Auslastung via WMI auslesen

Verfasst: 02.11.2015 18:38
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

Re: CPU-Auslastung via WMI auslesen

Verfasst: 02.11.2015 18:50
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:

Re: CPU-Auslastung via WMI auslesen

Verfasst: 02.11.2015 20:01
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. :)

Re: CPU-Auslastung via WMI auslesen

Verfasst: 02.11.2015 20:13
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