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()
Работа:
Загрузите пакет NuGet PortableDevices
Добавьте ссылки на эти 4 библиотеки COM:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
Возьми 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();