Я зарегистрировал окно с 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.
Должно ли это работать?
Или еще лучше... Есть ли альтернативный способ получить имя устройства при подключении?
EDIT (02/05/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" (именно это устройство в этом случае).