Справочник по C#

    Исходники по языку программирования CSharp

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

    /
    /
    /
    103 Views


          Рассмотрим пример получения информации о подключенных 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

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9