С# Как узнать конкретное USB-устройство из нескольких подключенных к одному и тому же USB-устройству?

У меня есть те же 2 веб-камеры Logitech (c920). Я хочу назначить эти 2 устройства для IN-Camera и OUT-Camera, так как мне нужна транзакция пользователей IN и OUT.

Теперь, когда я подключаю то же самое к ПК. VID, PID такие же, как и OEM.

Итак, как я могу узнать 2 устройства каждый раз, когда они подключены к ПК или после перезагрузки ПК по какой-либо причине.

Поэтому я ищу какой-нибудь УНИКАЛЬНЫЙ USB-дескриптор для этого USB-устройства.

нужна помощь по этому поводу.


person Abu Muhammad    schedule 29.03.2017    source источник
comment
В дескрипторе USB нет свойств MAC. пожалуйста, скажите, где я могу найти то же самое.   -  person Abu Muhammad    schedule 29.03.2017
comment
Вот связанный пост, который делает это через C++ . Вы можете использовать devcon.exe для получения списка всех или выбранных идентификаторов оборудования.   -  person Axel Kemper    schedule 29.03.2017


Ответы (1)


Следующий код может помочь получить доступ к идентификаторам оборудования ваших USB-устройств:

using System;
using System.Management;

namespace akWmiDeviceDemo
{
    class Program
    {
        static void Main(string[] args)
        {
        //  inspired by:
        //  https://blogs.msdn.microsoft.com/powershell/2007/02/24/displaying-usb-devices-using-wmi/
            string strComputer = ".";
            ManagementScope scope = new ManagementScope(@"\\" + strComputer + @"\root\cimv2");
            ObjectQuery queryUsbControllers = new ObjectQuery("Select * From Win32_USBControllerDevice");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, queryUsbControllers);
            ManagementObjectCollection usbControllers = searcher.Get();

            foreach (ManagementObject usbController in usbControllers)
            {
                string dependent = (string)usbController["Dependent"];
                string[] names = dependent.Replace("\"", "").Split(new char [] {'='});
                string strUsbControllerName = names[1];
                ObjectQuery queryUsbDevices = new ObjectQuery("Select * From Win32_PnPEntity Where DeviceID = '" + strUsbControllerName + "'");
                ManagementObjectSearcher deviceSearcher = new ManagementObjectSearcher(scope, queryUsbDevices);
                ManagementObjectCollection usbDevices = deviceSearcher.Get();

                o("");
                o("USB controller = {0}", strUsbControllerName);
                foreach (ManagementObject usbDevice in usbDevices)
                {
                    o("description = {0}", usbDevice["Description"]);
                    o("PnPDeviceID = {0}", usbDevice["PnPDeviceID"]);
                }
            }
        }

        static void o(string format, params object[] args)
        {
            Console.WriteLine(format, args);
        }
    }
}
person Axel Kemper    schedule 29.03.2017