Как получить понятное имя устройства из DEV_BROADCAST_DEVICEINTERFACE и идентификатора экземпляра устройстваC#

Место общения программистов C#
Anonymous
Как получить понятное имя устройства из DEV_BROADCAST_DEVICEINTERFACE и идентификатора экземпляра устройства

Сообщение Anonymous »

Я зарегистрировал окно с помощью RegisterDeviceNotification и могу успешно получать сообщения DEV_BROADCAST_DEVICEINTERFACE. Однако поле dbcc_name в возвращаемой структуре всегда пусто. У меня есть структура:

Код: Выделить всё

[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
public int dbcc_size;
public int dbcc_devicetype;
public int dbcc_reserved;
public Guid dbcc_classguid;
[MarshalAs(UnmanagedType.LPStr)]
public string dbcc_name;
}
И я использую Marshal.PtrToStructure для LParam сообщения WM_DEVICECHANGE.

Должно ли это работать?

Или еще лучше... Есть ли альтернативный способ получить имя устройства при подключении?

РЕДАКТИРОВАТЬ (05.02.2010 20:56GMT):

Я узнал, как заполнить поле dbcc_name, выполнив это:

Код: Выделить всё

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DEV_BROADCAST_DEVICEINTERFACE
{
public int dbcc_size;
public int dbcc_devicetype;
public int dbcc_reserved;
public Guid dbcc_classguid;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=255)]
public string dbcc_name;
}
но мне все еще нужен способ получить «дружественное» имя из int dbcc_name. Это выглядит следующим образом:


\?\USB#VID_05AC&PID_1294&MI_00#0#{6bdd1fc6-810f-11d0-bec7-08002be2092f


И я действительно просто хочу, чтобы это сказало «Apple iPhone» (именно это устройство в данном случае).

Вернуться в «C#»