c# - saber - Recuperar calificación de experiencia de Windows
no puedo evaluar mi equipo windows 7 (3)
Estoy buscando recuperar la calificación de experiencia de Windows de una máquina en C #. Si es posible, también me gustaría recuperar los números para cada componente (Gráficos, RAM, etc.)
es posible?
Aquí hay un fragmento para VB.NET. Convertido a C # (usando esto , todavía no he probado el código, aunque parece estar bien).
/// <summary>
/// Gets the base score of a computer running Windows Vista or higher.
/// </summary>
/// <returns>The String Representation of Score, or False.</returns>
/// <remarks></remarks>
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;
}
Supongo que solo devuelve la calificación general, pero espero que al menos debería comenzar. Puede ser solo una cuestión de cambiar un nombre de archivo / parámetro para obtener las calificaciones individuales.
Cada vez que el usuario pasa por el panel de control para calcular el Nivel de experiencia de Windows, el sistema crea un nuevo archivo en %Windows%/Performance/WinSAT/DataStore/
Necesita encontrar el archivo más reciente (se nombran con la fecha más significativa primero, por lo que encontrar el último archivo es trivial).
Estos archivos son archivos xml y son fáciles de analizar con XmlReader u otro analizador xml.
La sección que le interesa es WinSAT/WinSPR
y contiene todos los puntajes en una sola sección. P.ej
<WinSAT>
<WinSPR>
<SystemScore>3.7</SystemScore>
<MemoryScore>5.9</MemoryScore>
<CpuScore>5.2</CpuScore>
<CPUSubAggScore>5.1</CPUSubAggScore>
<VideoEncodeScore>5.3</VideoEncodeScore>
<GraphicsScore>3.9</GraphicsScore>
<GamingScore>3.7</GamingScore>
<DiskScore>5.2</DiskScore>
</WinSPR>
...
Lo mismo con 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);