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.)Recuperar Windows Experience Rating
¿Esto es posible?
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.)Recuperar Windows Experience Rating
¿Esto es posible?
Cada vez que el usuario a través del panel de control para calcular la experiencia Clasificación de Windows, el sistema crea un nuevo archivo en %Windows%\Performance\WinSAT\DataStore\
Es necesario encontrar el archivo más reciente (que se nombran con la fecha más significativo en primer lugar, así que encontrar el último archivo es trivial).
Estos archivos son xml y son fáciles de analizar con XmlReader u otro analizador xml.
La sección que te interesa es WinSAT\WinSPR
y contiene todas las puntuaciones 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>
...
Here es un fragmento para VB.NET. Convertido a C# (usando this, 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.
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);
Como Microsoft eliminó la página de la experiencia en Windows desde el Panel de control de Windows 8 en adelante, primero tendrá que generar un nuevo archivo en el almacén de datos. Consulte aquí para obtener más información: http://www.hanselman.com/blog/CalculateYourWEIWindowsExperienceIndexUnderWindows81.aspx – Surfbutler