Как получить базовую и расширенную информацию об аппаратном и программном обеспечении (графический процессор, жесткий диск, процессор, ОС, принтеры) в Winforms с C #

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

В этой статье вы узнаете, как получить основную и расширенную информацию о системе, используя C # в Winforms.

Важная заметка

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

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.

Теперь, когда вы это знаете, давайте начнем!

Графическая карта (GPU)

Чтобы получить информацию о GPU, нам нужно создать системный запрос к Win32_VideoController класс с использованием ManagementObjectSearcher учебный класс.

Начните с добавления следующей ссылки в ваш класс:

using System.Management;

Если вы все еще видите ошибку при использовании класса в вашем коде, пожалуйста, прочитайте Важные заметки в начале статьи.

Если вы все сделали правильно, то вы сможете запросить Win32_VideoController учебный класс. The Win32_VideoController WMI Класс представляет возможности и возможности управления видеоконтроллером в компьютерной системе под управлением Windows.

Чтобы получить доступ к классу WMI, нам нужно, как сказано выше, создать запрос. Этот запрос может быть создан с помощью ManagementObjectSearcher класс (доступно в System.Management). Он извлекает коллекцию объектов управления на основе указанного запроса. Этот класс является одной из наиболее часто используемых точек входа для получения управляющей информации.

Смотрите следующую реализацию ManagementObjectSearcher, запрашивающую класс Win32_VideoController для получения расширенной информации о графическом процессоре:

ManagementObjectSearcher myVideoObject = new ManagementObjectSearcher("select * from Win32_VideoController");
foreach (ManagementObject obj in myVideoObject.Get())
{
Console.WriteLine("Name  -  " + obj["Name"]);
Console.WriteLine("Status  -  " + obj["Status"]);
Console.WriteLine("Caption  -  " + obj["Caption"]);
Console.WriteLine("DeviceID  -  " + obj["DeviceID"]);
Console.WriteLine("AdapterRAM  -  " + obj["AdapterRAM"]);
Console.WriteLine("AdapterDACType  -  " + obj["AdapterDACType"]);
Console.WriteLine("Monochrome  -  " + obj["Monochrome"]);
Console.WriteLine("InstalledDisplayDrivers  -  " + obj["InstalledDisplayDrivers"]);
Console.WriteLine("DriverVersion  -  " + obj["DriverVersion"]);
Console.WriteLine("VideoProcessor  -  " + obj["VideoProcessor"]);
Console.WriteLine("VideoArchitecture  -  " + obj["VideoArchitecture"]);
Console.WriteLine("VideoMemoryType  -  " + obj["VideoMemoryType"]);
}

Объект управления объекта Win32_VideoController имеет больше свойств, Вы можете прочитать больше об этом классе и всех доступных свойствах в документации для разработчиков Microsoft здесь.

Замечания: помните, что оборудование, несовместимое с моделью драйвера дисплея Windows (WDDM), возвращает неточные значения свойств для экземпляров этого класса или просто пустое значение.

Вывод должен быть примерно таким:

/**
Name  -  NVIDIA GeForce GTX 760
Status  -  OK
Caption  -  NVIDIA GeForce GTX 760
DeviceID  -  VideoController1
AdapterRAM  -  2147483648
AdapterDACType  -  Integrated RAMDAC
Monochrome  -  False
InstalledDisplayDrivers  -  nvd3dumx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvd3dum,nvwgf2um,nvwgf2um,nvwgf2um
DriverVersion  -  21.21.13.7306
VideoProcessor  -  GeForce GTX 760
VideoArchitecture  -  5
VideoMemoryType  -  2
**/

Кроме того, если вы хотите преобразовать значение AdapterRAM в удобочитаемые значения (МБ, ГБ) вместо байтов, вы можете использовать упомянутый метод SizeSuffix в зоне жестких дисков:

// Convert the string obj["AdapterRAM"] into a Long value
Console.WriteLine("AdapterRAM  -  " + SizeSuffix((long)Convert.ToDouble(obj["AdapterRAM"])));
// Outputs : AdapterRAM  -  2,0 GB

Жесткие диски (и другие типы дисков)

Чтобы получить информацию об установленных дисках на рабочем столе, мы будем зависеть от DriveInfo class включены в System.IO Пространство имен. Этот класс обеспечивает доступ к информации на диске, он моделирует диск и предоставляет методы и свойства для запроса информации о диске. Используйте DriveInfo, чтобы определить, какие диски доступны и какие они есть. Вам нужно добавить следующую ссылку на ваш класс, если на них еще нет ссылок:

using System;
using System.IO;

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

DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo d in allDrives)
{
Console.WriteLine("Drive {0}", d.Name);
Console.WriteLine("  Drive type: {0}", d.DriveType);
if (d.IsReady == true)
{
Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
Console.WriteLine("  File system: {0}", d.DriveFormat);
Console.WriteLine("  Available space to current user:{0, 15} bytes", d.AvailableFreeSpace);
Console.WriteLine("  Total available space:          {0, 15} bytes", d.TotalFreeSpace);
Console.WriteLine("  Total size of drive:            {0, 15} bytes ", d.TotalSize);
Console.WriteLine("  Root directory:            {0, 12}", d.RootDirectory);
}
}

allDrives Переменная будет представлять собой итеративный массив, в котором каждый элемент содержит информацию об одном доступном диске в системе (диск может быть съемным [USB, жесткий диск USB], фиксированный [жесткий диск] и приводы CDRom). Поскольку не каждый показанный диск содержит информацию (в случае CDRom, когда внутри нет компакт-диска), вам необходимо проверить, доступен ли привод, проверив оператором if drive.IsReady имущество. Предыдущий код будет производить следующий вывод в консоли вывода:

/**
Output of the information about the drives available in the system
Drive C:\
Drive type: Fixed
Volume label:
File system: NTFS
Available space to current user:  1835493908480 bytes
Total available space:            1835493908480 bytes
Total size of drive:              1999804297216 bytes
Root directory:                     C:\
Drive D:\
Drive type: CDRom
Drive E:\
Drive type: Fixed
Volume label:
File system: NTFS
Available space to current user:   164813348864 bytes
Total available space:             164813348864 bytes
Total size of drive:               500096991232 bytes
Root directory:                     E:\
Drive F:\
Drive type: Fixed
Volume label: Carlos
File system: NTFS
Available space to current user:    39133581312 bytes
Total available space:              39133581312 bytes
Total size of drive:               320059994112 bytes
Root directory:                     F:\
Drive G:\
Drive type: Removable
Volume label: UBUNTU 16_1
File system: FAT32
Available space to current user:    30001135616 bytes
Total available space:              30001135616 bytes
Total size of drive:                31600672768 bytes
Root directory:                     G:\
**/

Как видите, в отношении свободного пространства и емкости дисков значение будет возвращено в байтах. Вы можете использовать следующую реализацию (функцию) для получения короткого вывода в более понятном значении (МБ, ГБ, ТБ). Значение будет автоматически преобразовано в наиболее приемлемое значение (если доступно терабайт, то значение будет показано в терабайтах):

static readonly string[] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
static string SizeSuffix(Int64 value)
{
if (value < 0) { return "-" + SizeSuffix(-value); }
if (value == 0) { return "0.0 bytes"; }
int mag = (int)Math.Log(value, 1024);
decimal adjustedSize = (decimal)value / (1L << (mag * 10));
return string.Format("{0:n1} {1}", adjustedSize, SizeSuffixes[mag]);
}

Чтобы преобразовать длинное значение в байтах в удобочитаемое значение, просто используйте SizeSuffix Функция в значениях, которые возвращают числовые значения:

Console.WriteLine("  Available space to current user:{0, 15}", SizeSuffix(d.AvailableFreeSpace));
Console.WriteLine("  Total available space:          {0, 15}", SizeSuffix(d.TotalFreeSpace));
Console.WriteLine("  Total size of drive:            {0, 15} ", SizeSuffix(d.TotalSize));

Сгенерированные выходные значения теперь должны быть более читабельными, как в Windows:

/**
Output of the information about the drives available in the system with readable values
Drive C:\
Drive type: Fixed
Volume label:
File system: NTFS
Available space to current user:         1,7 TB
Total available space:                   1,7 TB
Total size of drive:                     1,8 TB
Root directory:                     C:\
Drive D:\
Drive type: CDRom
Drive E:\
Drive type: Fixed
Volume label:
File system: NTFS
Available space to current user:       153,5 GB
Total available space:                 153,5 GB
Total size of drive:                   465,8 GB
Root directory:                     E:\
Drive F:\
Drive type: Fixed
Volume label: Carlos
File system: NTFS
Available space to current user:        36,4 GB
Total available space:                  36,4 GB
Total size of drive:                   298,1 GB
Root directory:                     F:\
Drive G:\
Drive type: Removable
Volume label: UBUNTU 16_1
File system: FAT32
Available space to current user:        27,9 GB
Total available space:                  27,9 GB
Total size of drive:                    29,4 GB
Root directory:                     G:\
**/

Процессор (ы)

Чтобы получить информацию о процессоре, нам нужно создать системный запрос к Win32_Processor класс с использованием ManagementObjectSearcher учебный класс.

Начните с добавления следующей ссылки в ваш класс:

using System.Management;

Если вы все еще видите ошибку при использовании класса в вашем коде, пожалуйста, прочитайте Важные заметки в начале статьи.

Если вы все сделали правильно, то вы сможете запросить Win32_Processor учебный класс. Win32_Processor Класс WMI представляет собой устройство, которое может интерпретировать последовательность инструкций на компьютере, работающем в операционной системе Windows.

Чтобы получить доступ к классу WMI, нам нужно, как сказано выше, создать запрос. Этот запрос может быть создан с помощью ManagementObjectSearcher класс (доступно в System.Management).

Смотрите следующую реализацию ManagementObjectSearcher, запрашивающую Win32_Processor класс для получения расширенной информации о процессоре:

ManagementObjectSearcher myProcessorObject = new ManagementObjectSearcher("select * from Win32_Processor");
foreach (ManagementObject obj in myProcessorObject.Get())
{
Console.WriteLine("Name  -  " + obj["Name"]);
Console.WriteLine("DeviceID  -  " + obj["DeviceID"]);
Console.WriteLine("Manufacturer  -  " + obj["Manufacturer"]);
Console.WriteLine("CurrentClockSpeed  -  " + obj["CurrentClockSpeed"]);
Console.WriteLine("Caption  -  " + obj["Caption"]);
Console.WriteLine("NumberOfCores  -  " + obj["NumberOfCores"]);
Console.WriteLine("NumberOfEnabledCore  -  " + obj["NumberOfEnabledCore"]);
Console.WriteLine("NumberOfLogicalProcessors  -  " + obj["NumberOfLogicalProcessors"]);
Console.WriteLine("Architecture  -  " + obj["Architecture"]);
Console.WriteLine("Family  -  " + obj["Family"]);
Console.WriteLine("ProcessorType  -  " + obj["ProcessorType"]);
Console.WriteLine("Characteristics  -  " + obj["Characteristics"]);
Console.WriteLine("AddressWidth  -  " + obj["AddressWidth"]);
}

Объект управления объекта Win32_Processor имеет больше свойств, Вы можете прочитать больше об этом классе и всех доступных свойствах в документации для разработчиков Microsoft здесь.

Вывод должен быть примерно таким:

/**
Name  -  Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
DeviceID  -  CPU0
Manufacturer  -  GenuineIntel
CurrentClockSpeed  -  3300
Caption  -  Intel64 Family 6 Model 60 Stepping 3
NumberOfCores  -  4
NumberOfEnabledCore  -  4
NumberOfLogicalProcessors  -  4
Architecture  -  9
Family  -  205
ProcessorType  -  3
Characteristics  -  4
AddressWidth  -  64
*/

Оперативная система

Чтобы получить информацию об Оперативной Системе, нам нужно создать системный запрос к Win32_OperatingSystem класс с использованием ManagementObjectSearcher учебный класс.

Начните с добавления следующей ссылки в ваш класс:

using System.Management;

Если вы все еще видите ошибку при использовании класса в вашем коде, пожалуйста, прочитайте Важные заметки в начале статьи.

Если вы все сделали правильно, то вы сможете запросить Win32_OperatingSystem учебный класс. Win32_OperatingSystem Класс WMI представляет собой операционную систему на базе Windows, установленную на компьютере.

Чтобы получить доступ к классу WMI, нам нужно, как сказано выше, создать запрос. Этот запрос может быть создан с помощью ManagementObjectSearcher класс (доступно в System.Management).

Смотрите следующую реализацию ManagementObjectSearcher, запрашивающую Win32_OperatingSystem Класс для получения расширенной информации об Оперативной Системе:

ManagementObjectSearcher myOperativeSystemObject = new ManagementObjectSearcher("select * from Win32_OperatingSystem");
foreach (ManagementObject obj in myOperativeSystemObject.Get())
{
Console.WriteLine("Caption  -  " + obj["Caption"]);
Console.WriteLine("WindowsDirectory  -  " + obj["WindowsDirectory"]);
Console.WriteLine("ProductType  -  " + obj["ProductType"]);
Console.WriteLine("SerialNumber  -  " + obj["SerialNumber"]);
Console.WriteLine("SystemDirectory  -  " + obj["SystemDirectory"]);
Console.WriteLine("CountryCode  -  " + obj["CountryCode"]);
Console.WriteLine("CurrentTimeZone  -  " + obj["CurrentTimeZone"]);
Console.WriteLine("EncryptionLevel  -  " + obj["EncryptionLevel"]);
Console.WriteLine("OSType  -  " + obj["OSType"]);
Console.WriteLine("Version  -  " + obj["Version"]);
}

Объект управления объекта Win32_OperatingSystem имеет больше свойств, Вы можете прочитать больше об этом классе и всех доступных свойствах в документации для разработчиков Microsoft здесь.

Вывод должен быть примерно таким:

/**
Caption  -  Microsoft Windows 10 Pro
WindowsDirectory  -  C:\Windows
ProductType  -  1
SerialNumber  -  00000-00000-00000-00000
SystemDirectory  -  C:\Windows\system32
CountryCode  -  49
CurrentTimeZone  -  60
EncryptionLevel  -  256
OSType  -  18
Version  -  10.0.10586
*/

Сетевой интерфейс

Чтобы получить информацию о сетевом интерфейсе, вы можете использовать NetworkInterface класс доступен в System.Net.NetworkInformation Пространство имен. Этот класс предоставляет конфигурацию и статистическую информацию для сетевого интерфейса.

Начните с добавления следующих ссылок в ваш класс:

using System;
using System.Net.NetworkInformation;

И проверьте следующую простую реализацию, в которой перечислены все доступные сетевые интерфейсы и некоторые доступные свойства каждого объекта:

NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
if (nics == null || nics.Length < 1)
{
Console.WriteLine("  No network interfaces found.");
}else{
foreach (NetworkInterface adapter in nics)
{
IPInterfaceProperties properties = adapter.GetIPProperties();
Console.WriteLine();
Console.WriteLine(adapter.Description);
Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length, '='));
Console.WriteLine("  Interface type .......................... : {0}", adapter.NetworkInterfaceType);
Console.WriteLine("  Physical Address ........................ : {0}", adapter.GetPhysicalAddress().ToString());
Console.WriteLine("  Operational status ...................... : {0}", adapter.OperationalStatus);
}
}

Вы можете прочитать больше о классе NetworkInterface в msdn здесь. Предыдущий код должен генерировать аналогичный вывод:

/**
Realtek PCIe GBE Family Controller
==================================
Interface type .......................... : Ethernet
Physical Address ........................ : XXXXXXXXXXXX
Operational status ...................... : Up
TAP-Windows Adapter V9
======================
Interface type .......................... : Ethernet
Physical Address ........................ : XXXXXXXXXXXX
Operational status ...................... : Down
Bluetooth Device (Personal Area Network)
========================================
Interface type .......................... : Ethernet
Physical Address ........................ : XXXXXXXXXXXX
Operational status ...................... : Down
Software Loopback Interface 1
=============================
Interface type .......................... : Loopback
Physical Address ........................ :
Operational status ...................... : Up
Teredo Tunneling Pseudo-Interface
=================================
Interface type .......................... : Tunnel
Physical Address ........................ : 00000000000000E0
Operational status ...................... : Up
Microsoft ISATAP Adapter
========================
Interface type .......................... : Tunnel
Physical Address ........................ : 00000000000000E0
Operational status ...................... : Down
*/

Тем не менее, вы можете создать более проработанный пример, используя NetworkInterfaces и IPGlobalProperties проверить, поддерживает ли сетевой интерфейс IPv4 и IPv6. В нем также перечислены доступные сети Bluetooth:

public static void ShowNetworkInterfaces()
{
IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
Console.WriteLine("Interface information for {0}.{1}     ",
computerProperties.HostName, computerProperties.DomainName);
if (nics == null || nics.Length <1)
{
Console.WriteLine(" No network interfaces found.");
return;
}
Console.WriteLine(" Number of interfaces .................... : {0}", nics.Length);
foreach (NetworkInterface adapter in nics)
{
IPInterfaceProperties properties = adapter.GetIPProperties();
Console.WriteLine();
Console.WriteLine(adapter.Description);
Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length, '='));
Console.WriteLine(" Interface type .......................... : {0}", adapter.NetworkInterfaceType);
Console.WriteLine(" Physical Address ........................ : {0}",
adapter.GetPhysicalAddress().ToString());
Console.WriteLine(" Operational status ...................... : {0}",
adapter.OperationalStatus);
string versions = "";
// Create a display string for the supported IP versions.
if (adapter.Supports(NetworkInterfaceComponent.IPv4))
{
versions = "IPv4";
}
if (adapter.Supports(NetworkInterfaceComponent.IPv6))
{
if (versions.Length> 0)
{
versions += " ";
}
versions += "IPv6";
}
Console.WriteLine("  IP version .............................. : {0}", versions);
//ShowIPAddresses(properties);
// The following information is not useful for loopback adapters.
if (adapter.NetworkInterfaceType == NetworkInterfaceType.Loopback)
{
continue;
}
Console.WriteLine("  DNS suffix .............................. : {0}",
properties.DnsSuffix);
string label;
if (adapter.Supports(NetworkInterfaceComponent.IPv4))
{
IPv4InterfaceProperties ipv4 = properties.GetIPv4Properties();
Console.WriteLine("  MTU...................................... : {0}", ipv4.Mtu);
if (ipv4.UsesWins)
{
IPAddressCollection winsServers = properties.WinsServersAddresses;
if (winsServers.Count > 0)
{
label = "  WINS Servers ............................ :";
//ShowIPAddresses(label, winsServers);
}
}
}
Console.WriteLine("  DNS enabled ............................. : {0}",
properties.IsDnsEnabled);
Console.WriteLine("  Dynamically configured DNS .............. : {0}",
properties.IsDynamicDnsEnabled);
Console.WriteLine("  Receive Only ............................ : {0}",
adapter.IsReceiveOnly);
Console.WriteLine("  Multicast ............................... : {0}",
adapter.SupportsMulticast);
}
}

Выполнение ShowNetwork должно генерировать вывод, похожий на:

/**
Interface information for **MyComputerName**.
Number of interfaces .................... : 6
Realtek PCIe GBE Family Controller
==================================
Interface type .......................... : Ethernet
Physical Address ........................ : XXXXXXXXXXXX
Operational status ...................... : Up
IP version .............................. : IPv4 IPv6
DNS suffix .............................. : fritz.box
MTU...................................... : 1500
DNS enabled ............................. : False
Dynamically configured DNS .............. : True
Receive Only ............................ : False
Multicast ............................... : True
TAP-Windows Adapter V9
======================
Interface type .......................... : Ethernet
Physical Address ........................ : XXXXXXXXXXXX
Operational status ...................... : Down
IP version .............................. : IPv4 IPv6
DNS suffix .............................. :
MTU...................................... : 1500
DNS enabled ............................. : False
Dynamically configured DNS .............. : True
Receive Only ............................ : False
Multicast ............................... : True
Bluetooth Device (Personal Area Network)
========================================
Interface type .......................... : Ethernet
Physical Address ........................ : XXXXXXXXXXXX
Operational status ...................... : Down
IP version .............................. : IPv4 IPv6
DNS suffix .............................. :
MTU...................................... : 1500
DNS enabled ............................. : False
Dynamically configured DNS .............. : True
Receive Only ............................ : False
Multicast ............................... : True
Software Loopback Interface 1
=============================
Interface type .......................... : Loopback
Physical Address ........................ :
Operational status ...................... : Up
IP version .............................. : IPv4 IPv6
Teredo Tunneling Pseudo-Interface
=================================
Interface type .......................... : Tunnel
Physical Address ........................ : 00000000000000E0
Operational status ...................... : Up
IP version .............................. : IPv6
DNS suffix .............................. :
DNS enabled ............................. : False
Dynamically configured DNS .............. : False
Receive Only ............................ : False
Multicast ............................... : False
Microsoft ISATAP Adapter
========================
Interface type .......................... : Tunnel
Physical Address ........................ : 00000000000000E0
Operational status ...................... : Down
IP version .............................. : IPv6
DNS suffix .............................. : fritz.box
DNS enabled ............................. : False
Dynamically configured DNS .............. : True
Receive Only ............................ : False
Multicast ............................... : False
*/

Звуковая карта (аудиоустройства)

Чтобы получить информацию об аудиоустройствах, нам нужно создать системный запрос к Win32_SoundDevice класс с использованием ManagementObjectSearcher учебный класс.

Начните с добавления следующей ссылки в ваш класс:

using System.Management;

Если вы все еще видите ошибку при использовании класса в вашем коде, пожалуйста, прочитайте Важные заметки в начале статьи.

Если вы все сделали правильно, то вы сможете запросить Win32_SoundDevice учебный класс. Win32_SoundDevice Класс WMI представляет свойства звукового устройства в компьютерной системе под управлением Windows.

Чтобы получить доступ к классу WMI, нам нужно, как сказано выше, создать запрос. Этот запрос может быть создан с помощью ManagementObjectSearcher класс (доступно в System.Management).

В следующем фрагменте перечислены все аудиоустройства (микрофоны, динамики, звуковая карта и т. Д.) И их свойства:

ManagementObjectSearcher myAudioObject = new ManagementObjectSearcher("select * from Win32_SoundDevice");
foreach (ManagementObject obj in myAudioObject.Get())
{
Console.WriteLine("Name  -  " + obj["Name"]);
Console.WriteLine("ProductName  -  " + obj["ProductName"]);
Console.WriteLine("Availability  -  " + obj["Availability"]);
Console.WriteLine("DeviceID  -  " + obj["DeviceID"]);
Console.WriteLine("PowerManagementSupported  -  " + obj["PowerManagementSupported"]);
Console.WriteLine("Status  -  " + obj["Status"]);
Console.WriteLine("StatusInfo  -  " + obj["StatusInfo"]);
Console.WriteLine(String.Empty.PadLeft(obj["ProductName"].ToString().Length, '='));
}

Объект управления объекта Win32_SoundDevice имеет больше свойств, Вы можете прочитать больше об этом классе и всех доступных свойствах в документации для разработчиков Microsoft здесь.

Вывод предыдущего фрагмента должен быть примерно таким:

/**
Name  -  Logitech Mic (QuickCam S5500)
ProductName  -  Logitech Mic (QuickCam S5500)
Availability  -
DeviceID  -  USB\VID_046D&PID_09A1&MI_02\8&1DEC173F&0&0002
PowerManagementSupported  -  False
Status  -  OK
StatusInfo  -  3
=============================
Name  -  NVIDIA High Definition Audio
ProductName  -  NVIDIA High Definition Audio
Availability  -
DeviceID  -  HDAUDIO\FUNC_01&VEN_10DE&DEV_0040&SUBSYS_1043847A&REV_1001\5&2F2C87F6&0&0001
PowerManagementSupported  -  False
Status  -  OK
StatusInfo  -  3
============================
Name  -  High Definition Audio-Gerät
ProductName  -  High Definition Audio-Gerät
Availability  -
DeviceID  -  HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_1462D816&REV_1003\4&C65B857&0&0001
PowerManagementSupported  -  False
Status  -  OK
StatusInfo  -  3
===========================
Name  -  Creative X-Fi Audio Processor (WDM)
ProductName  -  Creative X-Fi Audio Processor (WDM)
Availability  -
DeviceID  -  PCI\VEN_1102&DEV_000B&SUBSYS_00431102&REV_04\4&2F87A1B6&0&00E4
PowerManagementSupported  -  False
Status  -  OK
StatusInfo  -  3
===================================
Name  -  NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
ProductName  -  NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
Availability  -
DeviceID  -  ROOT\UNNAMED_DEVICE\0000
PowerManagementSupported  -  False
Status  -  OK
StatusInfo  -  3
===================================================
*/

Принтеры

Чтобы получить информацию об аудиоустройствах, нам нужно создать системный запрос к Win32_Printer класс с использованием ManagementObjectSearcher учебный класс.

Начните с добавления следующей ссылки в ваш класс:

using System.Management;

Если вы все еще видите ошибку при использовании класса в вашем коде, пожалуйста, прочитайте Важные заметки в начале статьи.

Если вы все сделали правильно, то вы сможете запросить Win32_Printer учебный класс. Win32_Printer Класс WMI представляет собой устройство, подключенное к компьютеру, работающему в операционной системе Microsoft Windows, которое может создавать напечатанное изображение или текст на бумаге или другом носителе.

Чтобы получить доступ к классу WMI, нам нужно, как сказано выше, создать запрос. Этот запрос может быть создан с помощью ManagementObjectSearcher класс (доступно в System.Management).

В следующем фрагменте приведен список всех доступных принтеров в системе (даже службы Microsoft Print to PDF):

ManagementObjectSearcher myPrinterObject = new ManagementObjectSearcher("select * from Win32_Printer");
foreach (ManagementObject obj in myPrinterObject.Get())
{
Console.WriteLine("Name  -  " + obj["Name"]);
Console.WriteLine("Network  -  " + obj["Network"]);
Console.WriteLine("Availability  -  " + obj["Availability"]);
Console.WriteLine("Is default printer  -  " + obj["Default"]);
Console.WriteLine("DeviceID  -  " + obj["DeviceID"]);
Console.WriteLine("Status  -  " + obj["Status"]);
Console.WriteLine(String.Empty.PadLeft(obj["Name"].ToString().Length, '='));
}

Объект управления объекта Win32_Printer имеет больше свойств, Вы можете прочитать больше об этом классе и всех доступных свойствах в документации для разработчиков Microsoft здесь.

Вывод должен выглядеть примерно так:

/**
Name  -  Microsoft XPS Document Writer
Network  -  False
Availability  -
Is default printer  -  False
DeviceID  -  Microsoft XPS Document Writer
Status  -  Unknown
=============================
Name  -  Microsoft Print to PDF
Network  -  False
Availability  -
Is default printer  -  False
DeviceID  -  Microsoft Print to PDF
Status  -  Unknown
======================
Name  -  Fax
Network  -  False
Availability  -
Is default printer  -  False
DeviceID  -  Fax
Status  -  Unknown
===
Name  -  Enviar a OneNote 2013
Network  -  False
Availability  -
Is default printer  -  False
DeviceID  -  Enviar a OneNote 2013
Status  -  Unknown
=====================
Name  -  Brother HL-3070CW series
Network  -  False
Availability  -
Is default printer  -  True
DeviceID  -  Brother HL-3070CW series
Status  -  Unknown
========================
**/

Повеселись !

Ссылка на основную публикацию
Adblock
detector