से दोस्ताना डिवाइस का नाम कैसे प्राप्त करें मैंने RegisterDeviceNotification के साथ एक विंडो पंजीकृत की है और DEV_BROADCAST_DEVICEINTERFACE संदेशों को सफलतापूर्वक प्राप्त कर सकता है। हालांकि, लौटाई गई संरचना में dbcc_name
फ़ील्ड हमेशा खाली होता है। struct मैं इस तरह के रूप में परिभाषित किया जाता है:DEV_BROADCAST_DEVICEINTERFACE और डिवाइस इंस्टेंस आईडी
[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
उपयोग कर रहा हूँ।
क्या यह काम कर रहा है?
या इससे भी बेहतर ... कनेक्शन पर डिवाइस का नाम पाने का कोई वैकल्पिक तरीका है?
संपादित करें (2010/02/05 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 क्या है उससे "मित्रवत" नाम प्राप्त करने के लिए। ऐसा लग रहा है निम्नलिखित:
\ \ यूएसबी # VID_05AC & PID_1294 & MI_00 # 0 # {6bdd1fc6-810f-11d0-bec7-08002be2092f}
और मैं वास्तव में सिर्फ यह कहना चाहता हूँ? "ऐप्पल आईफोन" (जो इस मामले में डिवाइस है)।
DEV_BROADCAST_DEVICEINTERFACE dbd = new DEV_BROADCAST_DEVICEINTERFACE; dbd.dbcc_size = 255; dbd.dbcc_name = new StringBuilder(dbd.dbcc_size);
फिर में उस संरचना गुजरती हैं, के मूल्य:
धन्यवाद !! मैं वही काम करने की कोशिश कर रहा हूं। –