He registrado una ventana con RegisterDeviceNotification y puedo recibir con éxito los mensajes DEV_BROADCAST_DEVICEINTERFACE. Sin embargo, el campo dbcc_name
en la estructura devuelta siempre está vacío. La estructura que tengo se define como tal:Cómo obtener el nombre de dispositivo amigable de DEV_BROADCAST_DEVICEINTERFACE y la ID de instancia de dispositivo
[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;
}
y estoy usando Marshal.PtrToStructure
en el LParam del mensaje WM_DEVICECHANGE.
¿Debería estar funcionando?
O mejor ... ¿Hay alguna forma alternativa de obtener el nombre de un dispositivo en la conexión?
EDITAR (02/05/2010 20: 56GMT):
descubrí cómo llegar al campo dbcc_name para poblar al hacer esto:
[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;
}
pero todavía necesitan una manera para obtener un nombre "Amigable" de lo que es int dbcc_name. Se parece a la siguiente:
\ \ USB # VID_05AC & PID_1294 & MI_00 # 0 # {6BDD1FC6-810F-11d0-BEC7-08002BE2092F}
Y realmente sólo quiero que diga? "Apple iPhone" (que es lo que es el dispositivo en este caso).
¡GRACIAS! He estado tratando de hacer lo mismo. –