Recuperare informazioni sulla scheda madre in C#
Utilizzando la classe ManagementObjectSearcher, in C# possiamo ottenere molte informazioni usando le query WMI.
La prima cosa che dobbiamo fare, è aggiungere al nostro progetto il riferimento a System.Management.
Detto ciò, vediamo come recupererare informazioni sulla scheda madre.
Io sto usando questa classe statica (non ricordo dove l'ho trovata, nel caso metterò il link):
using System;
using System.Management;
namespace ConsoleApp1
{
static class MotherboardInfo
{
private static ManagementObjectSearcher baseboardSearcher =
new ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_BaseBoard");
private static ManagementObjectSearcher motherboardSearcher =
new ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_MotherboardDevice");
static public string Availability
{
get
{
try
{
foreach (ManagementObject queryObj in motherboardSearcher.Get())
{
return GetAvailability(int.Parse(queryObj["Availability"].ToString()));
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public bool HostingBoard
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
if (queryObj["HostingBoard"].ToString() == "True")
return true;
else
return false;
}
return false;
}
catch (Exception e)
{
return false;
}
}
}
static public string InstallDate
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return ConvertToDateTime(queryObj["InstallDate"].ToString());
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string Manufacturer
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return queryObj["Manufacturer"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string Model
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return queryObj["Model"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string PartNumber
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return queryObj["PartNumber"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string PNPDeviceID
{
get
{
try
{
foreach (ManagementObject queryObj in motherboardSearcher.Get())
{
return queryObj["PNPDeviceID"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string PrimaryBusType
{
get
{
try
{
foreach (ManagementObject queryObj in motherboardSearcher.Get())
{
return queryObj["PrimaryBusType"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string Product
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return queryObj["Product"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public bool Removable
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
if (queryObj["Removable"].ToString() == "True")
return true;
else
return false;
}
return false;
}
catch (Exception e)
{
return false;
}
}
}
static public bool Replaceable
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
if (queryObj["Replaceable"].ToString() == "True")
return true;
else
return false;
}
return false;
}
catch (Exception e)
{
return false;
}
}
}
static public string RevisionNumber
{
get
{
try
{
foreach (ManagementObject queryObj in motherboardSearcher.Get())
{
return queryObj["RevisionNumber"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string SecondaryBusType
{
get
{
try
{
foreach (ManagementObject queryObj in motherboardSearcher.Get())
{
return queryObj["SecondaryBusType"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string SerialNumber
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return queryObj["SerialNumber"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string Status
{
get
{
try
{
foreach (ManagementObject querObj in baseboardSearcher.Get())
{
return querObj["Status"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string SystemName
{
get
{
try
{
foreach (ManagementObject queryObj in motherboardSearcher.Get())
{
return queryObj["SystemName"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
static public string Version
{
get
{
try
{
foreach (ManagementObject queryObj in baseboardSearcher.Get())
{
return queryObj["Version"].ToString();
}
return "";
}
catch (Exception e)
{
return "";
}
}
}
private static string GetAvailability(int availability)
{
switch (availability)
{
case 1: return "Other";
case 2: return "Unknown";
case 3: return "Running or Full Power";
case 4: return "Warning";
case 5: return "In Test";
case 6: return "Not Applicable";
case 7: return "Power Off";
case 8: return "Off Line";
case 9: return "Off Duty";
case 10: return "Degraded";
case 11: return "Not Installed";
case 12: return "Install Error";
case 13: return "Power Save - Unknown";
case 14: return "Power Save - Low Power Mode";
case 15: return "Power Save - Standby";
case 16: return "Power Cycle";
case 17: return "Power Save - Warning";
default: return "Unknown";
}
}
private static string ConvertToDateTime(string unconvertedTime)
{
string convertedTime = "";
int year = int.Parse(unconvertedTime.Substring(0, 4));
int month = int.Parse(unconvertedTime.Substring(4, 2));
int date = int.Parse(unconvertedTime.Substring(6, 2));
int hours = int.Parse(unconvertedTime.Substring(8, 2));
int minutes = int.Parse(unconvertedTime.Substring(10, 2));
int seconds = int.Parse(unconvertedTime.Substring(12, 2));
string meridian = "AM";
if (hours > 12)
{
hours -= 12;
meridian = "PM";
}
convertedTime = date.ToString() + "/" + month.ToString()
+ "/" + year.ToString() + " " +
hours.ToString() + ":" + minutes.ToString()
+ ":" + seconds.ToString() + " " + meridian;
return convertedTime;
}
}
}
E questo come richiamiamo il tutto:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Availability: " + MotherboardInfo.Availability);
Console.WriteLine("HostingBoard: " + MotherboardInfo.HostingBoard);
Console.WriteLine("InstallDate: " + MotherboardInfo.InstallDate);
Console.WriteLine("Manufacturer: " + MotherboardInfo.Manufacturer);
Console.WriteLine("Model: " + MotherboardInfo.Model);
Console.WriteLine("PartNumber: " + MotherboardInfo.PartNumber);
Console.WriteLine("PNPDeviceID: " + MotherboardInfo.PNPDeviceID);
Console.WriteLine("PrimaryBusType: " + MotherboardInfo.PrimaryBusType);
Console.WriteLine("Product: " + MotherboardInfo.Product);
Console.WriteLine("Removable: " + MotherboardInfo.Removable);
Console.WriteLine("Replaceable: " + MotherboardInfo.Replaceable);
Console.WriteLine("RevisionNumber: " + MotherboardInfo.RevisionNumber);
Console.WriteLine("SecondaryBusType: " + MotherboardInfo.SecondaryBusType);
Console.WriteLine("SerialNumber: " + MotherboardInfo.SerialNumber);
Console.WriteLine("Status: " + MotherboardInfo.Status);
Console.WriteLine("SystemName: " + MotherboardInfo.SystemName);
Console.WriteLine("Version: " + MotherboardInfo.Version);
}
}
}
Non vi posto l'output perchè sto usando Windows in virtuale; inoltre, vi specifico che questo funziona solo su Windows.
Enjoy!
c# windows wmi managementobjectsearcher
Commentami!