Домой System Получение информации об USB накопителях подключенных к ПЭВМ через WMI: Справочник по...

Получение информации об USB накопителях подключенных к ПЭВМ через WMI: Справочник по C#

1344
0


      Рассмотрим пример получения информации о подключенных USB накопителях с использованием WMI (Windows Management Instrumentation) и его класса Win32_DiskDrive. Класс Win32_DiskDrive позволяет получить информацию о накопителях, подключенных к компьютеру, точнее технических параметрах. В состав класса входят 49 свойств, которые доступны только для чтения. Класс находится в пространстве имен CIMV2, MOF файл — Cimwin32.mof, динамическая библиотека Cimwin32.dll, провайдер Win32.
      Так как данный класс возвращает информацию обо всех накопителях, а необходимо выделить только USB. Воспользуемся свойством «InterfaceType», содержащее информацию о типе интерфейса, через который подключено устройство.
Возможные значения:

  • SCSI
  • HDC
  • IDE
  • USB
  • 1394

Функционал данного примера:

  • Получение буквы накопителя, которую присвоила операционная система;
  • Получение модели устройства;
  • Ven;
  • Prod;
  • Rev;
  • Серийный номер;
  • Полный объем накопителя;
  • Свободное пространство на накопителе;
  • Используемое пространство.

Добавьте на главную форму, два компонента:

  • ListBox – Для отображения информации о USB накопителях;
  • Button – Запуск получения информации о USB накопителях.

У вас получится приведенный ниже пример:

      Сделайте двойной клик левой клавишей мыши по компоненту «Button1», вы перейдете в автоматически созданный метод «button1_Click». Добавьте приведенный ниже листинг, в данный метод.

string diskName = string.Empty;

//предварительно очищаем список
listBox1.Items.Clear();

//Получение списка накопителей подключенных через интерфейс USB
foreach (System.Management.ManagementObject drive in
new System.Management.ManagementObjectSearcher(
"select * from Win32_DiskDrive where InterfaceType='USB'").Get())
{
//Получаем букву накопителя
foreach (System.Management.ManagementObject partition in
new System.Management.ManagementObjectSearcher(
"ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"]
+ "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get())
{
foreach (System.Management.ManagementObject disk in
new System.Management.ManagementObjectSearcher(
"ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
+ partition["DeviceID"]
+ "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get())
{
//Получение буквы устройства
diskName = disk["Name"].ToString().Trim();
listBox1.Items.Add("Буква накопителя=" + diskName);
}
}

//Получение модели устройства
listBox1.Items.Add("Модель=" + drive["Model"]);

//Получение Ven устройства
listBox1.Items.Add("Ven=" +
parseVenFromDeviceID(drive["PNPDeviceID"].ToString().Trim()));

//Получение Prod устройства
listBox1.Items.Add("Prod=" +
parseProdFromDeviceID(drive["PNPDeviceID"].ToString().Trim()));

//Получение Rev устройства
listBox1.Items.Add("Rev=" +
parseRevFromDeviceID(drive["PNPDeviceID"].ToString().Trim()));

//Получение серийного номера устройства
string serial = drive["SerialNumber"].ToString().Trim();
//WMI не всегда может вернуть серийный номер накопителя через данный класс
if (serial.Length > 1)
listBox1.Items.Add("Серийный номер=" + serial);
else
//Если серийный не получен стандартным путем,
//Парсим информацию Plug and Play Device ID
listBox1.Items.Add("Серийный номер=" +
parseSerialFromDeviceID(drive["PNPDeviceID"].ToString().Trim()));

//Получение объема устройства в гигабайтах
decimal dSize = Math.Round((Convert.ToDecimal(
new System.Management.ManagementObject("Win32_LogicalDisk.DeviceID='"
+ diskName + "'")["Size"]) / 1073741824), 2);
listBox1.Items.Add("Полный объем=" + dSize + " gb");

//Получение свободного места на устройстве в гигабайтах
decimal dFree = Math.Round((Convert.ToDecimal(
new System.Management.ManagementObject("Win32_LogicalDisk.DeviceID='"
+ diskName + "'")["FreeSpace"]) / 1073741824), 2);
listBox1.Items.Add("Свободный объем=" + dFree + " gb");

//Получение использованного места на устройстве
decimal dUsed = dSize - dFree;
listBox1.Items.Add("Используемый объем=" + dUsed + " gb");

listBox1.Items.Add("");
}

      Так же в обозревателе решений добавьте ссылку на библиотеку «System.Management». Так же добавьте в листинг главной формы, четыре дополнительных метода.

private string parseSerialFromDeviceID(string deviceId)
{
string[] splitDeviceId = deviceId.Split('\');
string[] serialArray;
string serial;
int arrayLen = splitDeviceId.Length - 1;

serialArray = splitDeviceId[arrayLen].Split('&');
serial = serialArray[0];

return serial;
}

private string parseVenFromDeviceID(string deviceId)
{
string[] splitDeviceId = deviceId.Split('\');
string Ven;
//Разбиваем строку на несколько частей.
//Каждая чаcть отделяется по символу &
string[] splitVen = splitDeviceId[1].Split('&');

Ven = splitVen[1].Replace("VEN_","");
Ven = Ven.Replace("_"," ");
return Ven;
}

private string parseProdFromDeviceID(string deviceId)
{
string[] splitDeviceId = deviceId.Split('\');
string Prod;
//Разбиваем строку на несколько частей.
//Каждая чаcть отделяется по символу &
string[] splitProd = splitDeviceId[1].Split('&');

Prod = splitProd[2].Replace("PROD_", ""); ;
Prod = Prod.Replace("_", " ");
return Prod;
}

private string parseRevFromDeviceID(string deviceId)
{
string[] splitDeviceId = deviceId.Split('\');
string Rev;
//Разбиваем строку на несколько частей.
//Каждая чаcть отделяется по символу &
string[] splitRev = splitDeviceId[1].Split('&');

Rev = splitRev[3].Replace("REV_", ""); ;
Rev = Rev.Replace("_", " ");
return Rev;
}

      Запустите ваш проект, нажав на клавиатуре, клавишу «F5». Нажмите на единственную кнопку, расположенную на вашей форме. Если у вас имеются подключенные USB накопители, то вы получите по ним информацию. Пример работы программы:

Ссылка для скачивания примера: Rusfolder.net

Получение информации об USB накопителях подключенных к ПЭВМ через WMI: Справочник по C#

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Перехват необработанных исключений в приложении: Справочник по C#

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь