![]() |
Windows Leistungsindex
In Windows gibt es den "Windows Experience Index (WEI) score".
Im Ordner "C:\Windows\Performance\WinSAT\DataStore\" gibt es mehrere Dateien mit dem Muster "<...> Formal.Assessment (Recent).WinSAT.xml", welche den System-Leistungsindex enthalten: <SystemScore>7.5</SystemScore> Weiß jemand, ob dieser System-Leistungsindex noch sonstwo gespeichert ist (Registry?), sodass man nicht mühsam alle diese XML-Dateien parsen muss? |
AW: Windows Leistungsindex
Kann jemand bitte mal testen, ob das auf seinem System funktioniert? Auf meinem System funktioniert es nämlich nicht - Ergebnis ist immer -1,00
Delphi-Quellcode:
program TestConsoleApplication;
{$APPTYPE CONSOLE} {$R *.res} uses CodeSiteLogging, WbemScripting_TLB, ActiveX, System.Variants, System.SysUtils; function GetWMIstring(wmiHost, wmiClass, wmiProperty: string): string; var // These are all needed for the WMI querying process Locator: ISWbemLocator; Services: ISWbemServices; SObject: ISWbemObject; ObjSet: ISWbemObjectSet; SProp: ISWbemProperty; Enum: IEnumVariant; Value: Cardinal; TempObj: OleVariant; SN: string; begin Result := ''; try // Create the Location object Locator := CoSWbemLocator.Create; // Connect to the WMI service, with the root\cimv2 namespace Services := Locator.ConnectServer(wmiHost, 'root\cimv2', '', '', '', '', 0, nil); ObjSet := Services.ExecQuery('SELECT * FROM ' + wmiClass, 'WQL', wbemFlagReturnImmediately and wbemFlagForwardOnly, nil); Enum := (ObjSet._NewEnum) as IEnumVariant; while Enum.Next(1, TempObj, Value) = S_OK do begin try SObject := IUnknown(TempObj) as ISWBemObject; except SObject := nil; end; // Always need to free interface in TempObj TempObj := System.Variants.Unassigned; if SObject <> nil then begin SProp := SObject.Properties_.Item(wmiProperty, 0); SN := SProp.Get_Value; if not VarIsNull(SN) then begin Result := SN; Break; end; end; end; // Trap any exceptions (Like not having WMI installed will cause one...) except end; end; begin try CodeSite.Send('Start'); CodeSite.Send('CPUScore', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'CPUScore'), -1)])); CodeSite.Send('WinSPRLevel', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'WinSPRLevel'), -1)])); except on E: Exception do begin Writeln(E.ClassName, ': ', E.Message); Readln; end; end; end. |
AW: Windows Leistungsindex
Jetzt funktioniert es! War ein kleiner Druckfehler ;-)
|
AW: Windows Leistungsindex
Hier sind die anderen Abfragen:
Delphi-Quellcode:
CodeSite.Send('CPUScore', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'CPUScore'), -1)]));
CodeSite.Send('MemoryScore', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'MemoryScore'), -1)])); CodeSite.Send('GraphicsScore', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'GraphicsScore'), -1)])); CodeSite.Send('D3DScore', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'D3DScore'), -1)])); CodeSite.Send('DiskScore', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'DiskScore'), -1)])); CodeSite.Send('WinSPRLevel', Format('%.2f', [StrToFloatDef(GetWMIstring('', 'Win32_WinSAT', 'WinSPRLevel'), -1)])); |
AW: Windows Leistungsindex
Da ist aber mindestens ein gravierender Fehler drin.
Für ein leeres
Delphi-Quellcode:
sollte man mindestens gesteinigt werden
except end
und
Delphi-Quellcode:
wird niemals False liefer, da SN den falschen Typen hat.
if VarIsNull(SN)
Noch besser ist aber, dass der Fehler, welcher damit abgefangen werden sollte, schon vorher knallt, wenn versucht wird Null an SN zuzuweisen. |
AW: Windows Leistungsindex
Verbesserungsvorschlag?
|
AW: Windows Leistungsindex
ot
Nur mal rein Interessehalber nachgefragt, was fängst Du mit diesen Werten an? |
AW: Windows Leistungsindex
Zitat:
Delphi-Quellcode:
liegt, wo einer String-Typ-Variablen (SN) ein Ergebnis vom Typ OleVariant zugewiesen wird. Wieso meckert da der Compiler nicht?
SN := SProp.Get_Value;
|
AW: Windows Leistungsindex
Zitat:
Delphi-Quellcode:
SN := string(SProp.Get_Value);
//if not VarIsNull(SN) then if SN <> '' then begin Result := SN; Break; end; |
AW: Windows Leistungsindex
![]() Wahrscheinlich wäre es besser, wenn du mal ausprobieren würdest, wie dein Code bei NULL reagiert, dann wird aus Vermutung Gewissheit und aus Ahnung Wissen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz