Tôi đã đăng ký cửa sổ với RegisterDeviceNotification và có thể nhận thành công DEV_BROADCAST_DEVICEINTERFACE thư. Tuy nhiên, trường dbcc_name
trong cấu trúc trả về luôn trống. Các struct Tôi có được định nghĩa như vậy:Cách nhận tên thiết bị thân thiện từ DEV_BROADCAST_DEVICEINTERFACE và ID thiết bị thiết bị
[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;
}
Và tôi đang sử dụng Marshal.PtrToStructure
trên lParam của thông điệp WM_DEVICECHANGE.
Điều này có đang hoạt động không?
Hoặc thậm chí tốt hơn ... Có cách nào khác để lấy tên thiết bị khi kết nối không?
EDIT (2010/02/05 20: 56GMT):
tôi phát hiện ra như thế nào để có được những lĩnh vực dbcc_name để cư bằng cách làm này:
[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;
}
nhưng tôi vẫn cần một cách để có được một tên "thân thiện" từ những gì là int dbcc_name. Nó trông giống như sau:
\ \ USB # VID_05AC & PID_1294 & MI_00 # 0 # {6bdd1fc6-810f-11d0-bec7-08002be2092f}
Và tôi thực sự chỉ muốn nó nói gì? "Apple iPhone" (đó là thiết bị trong trường hợp này).
THANKS !! Tôi đã cố gắng làm điều tương tự. –