RegisterDeviceNotification으로 창을 등록 했으므로 DEV_BROADCAST_DEVICEINTERFACE 메시지를 성공적으로 수신 할 수 있습니다. 그러나 반환 된 구조체의 dbcc_name
필드는 항상 비어 있습니다. 내가 가진 구조체는 다음과 같이 정의된다DEV_BROADCAST_DEVICEINTERFACE 및 Device Instance ID에서 친숙한 장치 이름을 얻는 방법
[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;
}
그리고 나는 WM_DEVICECHANGE 메시지의 LPARAM에 Marshal.PtrToStructure
을 사용하고 있습니다.
이 기능을 사용해야합니까?
또는 더 좋게 ... 연결시 장치의 이름을 얻는 다른 방법이 있습니까?
는EDIT (2010년 2월 5일 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에서 "Friendly"이름을 얻습니다. 그것은처럼 보이는 다음
\ \ USB 번호 VID_05AC & PID_1294 & MI_00 # 0 # {6bdd1fc6-810f-11D0-BEC7-08002BE2092F}
그리고 정말 그냥하고 싶은 말은? "Apple iPhone"(이 경우 장치가 무엇인지).
DEV_BROADCAST_DEVICEINTERFACE dbd = new DEV_BROADCAST_DEVICEINTERFACE; dbd.dbcc_size = 255; dbd.dbcc_name = new StringBuilder(dbd.dbcc_size);
그런 다음에 그 구조를 통과 값을 아래에 도시 된 바와 같이 그것은 가능성
고맙습니다 !! 나는 똑같은 일을하려고 애썼다. –