C# получить портативные устройства, подключенные к ПК

Я пытаюсь получить все USB-устройства (включая портативные устройства) на Windows 7, теперь я искал все и не нашел хорошего ответа.

Я попробовал этот код:

static void Main(string[] args)
{
    //
    // Get an instance of the device manager
    //
    PortableDeviceApiLib.PortableDeviceManagerClass devMgr
        = new PortableDeviceApiLib.PortableDeviceManagerClass();

    //
    // Probe for number of devices
    //
    uint cDevices = 1;
    devMgr.GetDevices(null, ref cDevices);

    //
    // Re-allocate if needed
    //
    if (cDevices > 0)
    {
        string[] deviceIDs = new string[cDevices];
        devMgr.GetDevices(deviceIDs, ref cDevices);

        for (int ndxDevices = 0; ndxDevices < cDevices; ndxDevices++)
        {
            Console.WriteLine("Device[{0}]: {1}",
                    ndxDevices + 1, deviceIDs[ndxDevices]);
        }
    }
    else
    {
        Console.WriteLine("No WPD devices are present!");
    }
}

но я получаю эту ошибку:

тип взаимодействия 'portabledeviceapilib.portabledevicemanagerclass' Не может быть встроен

Теперь я застрял.

Если бы вы могли помочь мне с этим кодом / дать мне представление, что я должен попробовать, я буду счастлив

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

Спасибо вперед

2 ответа

Я использую пакет NuDet PortableDevices (который основан на учебнике Кристофа Гирса).

Получено из первой части урока:

public void ListDevices()
{
    var devices = new PortableDeviceCollection();
    devices.Refresh();

    foreach (var device in devices)
    {
        device.Connect();
        Console.WriteLine(@"DeviceId: {0}, FriendlyName: {1}", device.DeviceId, device.FriendlyName);
        device.Disconnect();
    }
}

Расширить ответ @CodeFox и сделать его код ListDevices() Работа:

  1. Загрузите пакет NuGet PortableDevices

  2. Добавьте ссылки на эти 4 библиотеки COM:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. Возьми DLL obj\Debug и положить их в bin\Debug:

    • Interop.PortableDeviceClassExtension.dll
    • Interop.PortableDeviceConnectApiLib.dll
    • Interop.PortableDeviceTypesLib.dll
    • Interop.PortableDeviceApiLib.dll

Теперь вы можете использовать эту функцию, хотя FriendlyName похоже не работает (возвращает пустую строку):

    private IDictionary<string, string> GetDeviceIds()
    {
        var deviceIds = new Dictionary<string, string>();
        var devices = new PortableDeviceCollection();
        devices.Refresh();
        foreach (var device in devices)
        {
            device.Connect();
            deviceIds.Add(device.FriendlyName, device.DeviceId);
            Console.WriteLine(@"DeviceId: {0}, FriendlyName: {1}", device.DeviceId, device.FriendlyName);
            device.Disconnect();
        }
        return deviceIds;
    }

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

var contents = device.GetContents();
Другие вопросы по тегам