В данном материале будет рассмотрено получение информации о компьютере с помощью инструментария управления Windows — WMI и языка программирования C#. Описаны необходимые библиотеки и представлен исходник программы для скачивания (в конце статьи).
Здравствуйте, уважаемые читатели!
Получение информации о компьютере в языке C# возможно с помощью WMI запросов. Windows Management Instrumentation (WMI) — это инструментарий управления Windows. WMI — это технология для мониторинга работы компьютерной инфраструктуры с помощью Windows.
Получение информации о компьютере с помощью WMI похоже на запросы к базе данных. Описание всех классов WMI и их свойств вы можете найти здесь.
Получение информации о компьютере. Написание программы C#
Для начала необходимо включить в исходный код пространство имен System.Management:
1 |
using System.Management; |
Но этот код подчеркнётся красным цветом, чтобы это исправить также нужно добавить ссылку на сборку System.Management. Для этого жмём правой кнопкой мыши на References в «обозревателе решений».
Далее щёлкаем на пункт «Добавить ссылку…».
В появившемся окне ищем сборку System.Management, ставим галочку и жмём кнопку «ОК».
Готово!
Теперь напишем метод, который будет обрабатывать WMI запросы и возвращать результат.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
private static List<string> GetHardwareInfo(string WIN32_Class, string ClassItemField) { List<string> result = new List<string>(); ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM " + WIN32_Class); try { foreach (ManagementObject obj in searcher.Get()) { result.Add(obj[ClassItemField].ToString().Trim()); } } catch (Exception ex) { Console.WriteLine(ex.Message); } return result; } |
На вход метод принимает: string WIN32_Class — это название WMI класса, информацию из которого требуется получить, и string ClassItemField — это название свойства класса, которое необходимо узнать. Метод возвращает список List<string> result. Список строк (а не просто строка) используется потому, что в компьютере, например, может быть установлено несколько дисководов и если потребуется получить соответствующую информацию, то она (обо ВСЕХ дисководах) будет записана в список, и ничего не потеряется.
Далее. Напишем метод, который будет выводить полученную информацию о компьютере на экран.
1 2 3 4 5 6 7 8 9 10 11 |
private static void OutputResult(string info, List<string> result) { if (info.Length > 0) Console.WriteLine(info); if (result.Count > 0) { for (int i = 0; i < result.Count; ++i) Console.WriteLine(result[i]); } } |
Аргументы метода: string info — текстовая строка с информацией о выходных данных и List<string> result — список, который возвращает метод GetHardwareInfo().
На основе методов, описанных выше, получение информации о компьютере будет происходить так: получим, например, название процессора:
1 |
OutputResult("Процессор:", GetHardwareInfo("Win32_Processor", "Name")); |
Производителя процессора:
1 |
OutputResult("Производитель:", GetHardwareInfo("Win32_Processor", "Manufacturer")); |
Описание процессора:
1 |
OutputResult("Описание:", GetHardwareInfo("Win32_Processor", "Description")); |
Название видеокарты:
1 |
OutputResult("Видеокарта:", GetHardwareInfo("Win32_VideoController", "Name")); |
Название видеопроцессора:
1 |
OutputResult("Видеопроцессор:", GetHardwareInfo("Win32_VideoController", "VideoProcessor")); |
Версия драйвера видеокарты:
1 |
OutputResult("Версия драйвера:", GetHardwareInfo("Win32_VideoController", "DriverVersion")); |
Объем памяти видеокарты:
1 |
OutputResult("Объем памяти (в байтах):", GetHardwareInfo("Win32_VideoController", "AdapterRAM")); |
Название дисковода:
1 |
OutputResult("Название дисковода:", GetHardwareInfo("Win32_CDROMDrive", "Name")); |
Буква привода дисковода:
1 |
OutputResult("Буква привода:", GetHardwareInfo("Win32_CDROMDrive", "Drive")); |
Название жесткого диска:
1 |
OutputResult("Жесткий диск:", GetHardwareInfo("Win32_DiskDrive", "Caption")); |
Объем памяти жесткого диска:
1 |
OutputResult("Объем (в байтах):", GetHardwareInfo("Win32_DiskDrive", "Size")); |
Запустим программу и просмотрим, что получится.
Как вы видите, не зря мы использовали список List<> для хранения данных. Например, у меня на ноутбуке две видеокарты и два привода: реальный и виртуальный — и информация обо всех них отобразилась.
Скачать исходник
Поделиться в соц. сетях:
Скажите, а как сделать запись в csv? Буду очень признателен за помощь
Открыть файл с помощью FileStream, используя параметр Append (указатель т. о. будет переведен в конец файла и файл не будет перезаписан), и записать нужные данные с помощью класса StreamWriter, учитывая спецификацию csv.
Спасибо! Все очень понятно. Очень пригодилось. И за исходник отдельное спасибо )
Каким образом можно получить список видеоадаптеров, который будет идентичен списку из диспетчера устройств.
Например на одном из ПК данный код выдал такой список:
— NVIDIA GeForce 1080Ti
— NVIDIA GeForce 1050
— NVIDIA GeForce 1070
Но в диспетчере устройств он такой:
— NVIDIA GeForce 1070
— NVIDIA GeForce 1080Ti
— NVIDIA GeForce 1050
Тоесть, как получить «правильный» список устройств. Ибо это доставляет ряд трудностей с организацией программы (когда название устройства одно, а характеристики выдаются от другого)
P.S. пример из головы, но факт «неправильного» списка есть.