检索Windows体验评级

我想在C#中检索机器的Windows体验等级。 如果可能,我还想检索每个组件的数字(图形,RAM等)

这可能吗?

每次用户通过控制面板计算Windows体验评级时,系统都会在%Windows%\Performance\WinSAT\DataStore\创建一个新文件

您需要找到最新的文件(它们首先以最重要的日期命名,因此查找最新文件非常简单)。

这些文件是xml文件,易于使用XmlReader或其他xml解析器进行解析。

您感兴趣的部分是WinSAT\WinSPR并在一个部分中包含所有分数。 例如

   3.7 5.9 5.2 5.1 5.3 3.9 3.7 5.2  ... 

与LINQ相同:

 var dirName = Environment.ExpandEnvironmentVariables(@"%WinDir%\Performance\WinSAT\DataStore\"); var dirInfo = new DirectoryInfo(dirName); var file = dirInfo.EnumerateFileSystemInfos("*Formal.Assessment*.xml") .OrderByDescending(fi => fi.LastWriteTime) .FirstOrDefault(); if (file == null) throw new FileNotFoundException("WEI assessment xml not found"); var doc = XDocument.Load(file.FullName); Console.WriteLine("Processor: " + doc.Descendants("CpuScore").First().Value); Console.WriteLine("Memory (RAM): " + doc.Descendants("MemoryScore").First().Value); Console.WriteLine("Graphics: " + doc.Descendants("GraphicsScore").First().Value); Console.WriteLine("Gaming graphics: " + doc.Descendants("GamingScore").First().Value); Console.WriteLine("Primary hard disk: " + doc.Descendants("DiskScore").First().Value); Console.WriteLine("Base score: " + doc.Descendants("SystemScore").First().Value); 

这是VB.NET的一个片段。 转换为C#(使用这个 ,我还没有真正测试过代码,虽然它看起来很好)。

 ///  /// Gets the base score of a computer running Windows Vista or higher. ///  /// The String Representation of Score, or False. ///  public string GetBaseScore() { // Check if the computer has a \WinSAT dir. if (System.IO.Directory.Exists("C:\\Windows\\Performance\\WinSAT\\DataStore")) { // Our method to get the most recently updated score. // Because the program makes a new XML file on every update of the score, // we need to calculate the most recent, just incase the owner has upgraded. System.IO.DirectoryInfo Dir = new System.IO.DirectoryInfo("C:\\Windows\\Performance\\WinSAT\\DataStore"); System.IO.FileInfo[] fileDir = null; System.IO.FileInfo fileMostRecent = default(IO.FileInfo); System.DateTime LastAccessTime = default(System.DateTime); string LastAccessPath = string.Empty; fileDir = Dir.GetFiles; // Loop through the files in the \WinSAT dir to find the newest one. foreach (var fileMostRecent in fileDir) { if (fileMostRecent.LastAccessTime >= LastAccessTime) { LastAccessTime = fileMostRecent.LastAccessTime; LastAccessPath = fileMostRecent.FullName; } } // Create an XmlTextReader instance. System.Xml.XmlTextReader xmlReadScore = new System.Xml.XmlTextReader(LastAccessPath); // Disable whitespace handling so we don't read over them xmlReadScore.WhitespaceHandling = System.Xml.WhitespaceHandling.None; // We need to get to the 25th tag, "WinSPR". for (int i = 0; i <= 26; i++) { xmlReadScore.Read(); } // Create a string variable, so we can clean up without any mishaps. string SystemScore = xmlReadScore.ReadElementString("SystemScore"); // Clean up. xmlReadScore.Close(); return SystemScore; } // Unsuccessful. return false; } 

我想它只会返回整体评分,但希望它至少应该让你开始。 可能只需更改文件名/参数即可获得个人评级。