C#获取连接到PC的便携式设备

时间:2015-09-12 22:42:11

标签: c# connection usb wpd

我正在尝试在Windows 7上获取所有USB设备(包括便携式设备) 现在我搜遍了所有并没有找到一个好的答案。

我试过这段代码:

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连接, 如果连接了手机或鼠标。我想知道连接的是什么。

Thanx Ahead

2 个答案:

答案 0 :(得分:3)

我正在使用NuGet包PortableDevices(基于tutorial by Christophe Geers)。

源自本教程的第一部分:

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();
    }
}

答案 1 :(得分:1)

展开@CodeFox's answer,并使代码ListDevices()正常工作:

  1. 下载NuGet包PortableDevices

  2. 添加对这4个COM库的引用:

    • PortableDeviceClassExtension
    • PortableDeviceConnectApi
    • PortableDeviceTypes
    • PortableDeviceApi
  3. 将{d}放在obj\Debug下并将其放入bin\Debug

    • Interop.PortableDeviceClassExtension.dll
    • Interop.PortableDeviceConnectApiLib.dll
    • Interop.PortableDeviceTypesLib.dll
    • Interop.PortableDeviceApiLib.dll
  4. 现在你可以使用这个函数,虽然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();