Как получить информацию о материнской плате с помощью C # в WinForms

Во многих приложениях, таких как Speccy, вы можете видеть подробную информацию о различных компонентах вашего процессора. Если вы экспериментируете с C # и хотите получить информацию о материнской плате, есть довольно простой способ сделать это с помощью классов WMI Windows.

В этой статье мы поделимся с вами очень простым способом получения подробной информации о материнской плате.

1. Добавьте ссылку на класс System.Management

Чтобы получить информацию о материнской плате с C # в WinForms, вам потребуется доступ к классу System Management:

using System.Management;

Однако в некоторых версиях Visual Studio (особенно в версии 2010 и более поздних) вам необходимо добавить ссылку (.DLL) в вашем проекте вручную. Для этого выполните следующие действия:

  1. Щелкните правой кнопкой мыши на Project, Добавить ссылки

  2. Выберите Сборки (рамки) Вкладка и поиск System.Management и, наконец, добавьте ссылку и нажмите ОК.

Добавьте System.Management справочную визуальную студию вручную

Нам нужно добавить System.Management создавать запросы в WMI Classes, Узнайте больше о получении классов WMI в .NET в msdn здесь.

С другой стороны, помните что все реализации который использует ManagementObjectSearcher класс для получения системной информации, значения свойств которой являются целочисленными значениями (0-100), и эти значения не связаны с именем свойства (т. е. с Video_Controller Класс GPU в Архитектура свойство, которое возвращает значение от 0 до 9), и вы ожидаете очень специфическое значение (например, х86 или х64), тогда, вероятно, вы проходите мимо какой-то информации! Пожалуйста, прочитайте документацию класса на веб-сайте Microsoft для разработчиков (предоставлено в каждой части статьи соответственно), чтобы получить подробное описание каждого свойства.

Например, как было сказано ранее, свойство Architecture возвращает целое число (которое не имеет смысла для вас как значение), однако это значение указывает индекс (а не само значение) следующей таблицы:

Индекс
Значение
x86
1MIPS
2Альфа
3PowerPC
5РУКА
6ia64 (системы на базе Itanium)
9x64

Так что вам решать, как отобразить информацию в вашем приложении в соответствии с информацией, представленной на веб-сайте msdn.

2. Создайте статический класс MotherboardInfo

В качестве следующего шага, теперь, когда у вас есть доступ к классу управления WMI, вы можете зарегистрировать новый класс (создать новый класс MotherboardInfo.cs), который мы будем использовать для получения информации о материнской плате. Этот класс является статическим, поэтому вы сможете получить некоторые свойства без необходимости его создания:

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
static public 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;
}
}

3. Использование класса для получения информации

После регистрации класса вы сможете получить информацию, статически преобразующую класс MotherboardInfo и получающую доступ к желаемому свойству, например, одна из наиболее востребованных функций — это узнать модель материнской платы для поиска драйверов:

Console.WriteLine("Motherboard Properties:");
Console.WriteLine("-----------------------------------------------------------------------------");
Console.WriteLine("-----------------------------------------------------------------------------");
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);

Выходные данные будут различаться в зависимости от характеристик вашего компьютера, но будут похожи на следующие выходные данные:

Motherboard Properties:
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Availability: Running or Full Power
HostingBoard: True
InstallDate:
Manufacturer: MSI
Model:
PartNumber:
PNPDeviceID:
PrimaryBusType: PCI
Product: H110M PRO-VD PLUS (MS-7A15)
Removable: False
Replaceable: True
RevisionNumber:
SecondaryBusType: ISA
SerialNumber: GB16464640
Status: OK
SystemName: DESKTOP-N36LKRA
Version: 1.0
Ссылка на основную публикацию
Adblock
detector