我有一个通过蓝牙连接的串行设备。它在COM4上显示得很好。我可以毫不费力地与它通信。
我想让用户更容易找到它(理想情况下,我会自动检测它),所以我想按名称查找它。在“设备和打印机”列表中,我得到了一个有效的名称,这是完美的。但是,我似乎无法通过编程找到该值。我用"ManagementObjectSearcher“类尝试了很多东西,包括列出所有的属性和SystemProperties,但没有一个值与”设备和打印机“中显示的名称相匹配。
如果我查看“设备管理器”列表,它只显示“蓝牙链路上的标准串行(COM4)",这显然对识别它没有用处。
那么我怎么才能在“设备和打印机”列表中获得显示的名称呢?
发布于 2014-06-11 05:41:01
这就是你要找的吗?
http://msdn.microsoft.com/en-us/library/system.drawing.printing.printersettings.installedprinters(v=vs.110).aspx
发布于 2014-06-11 08:24:32
所以,我找到了一个解决方案。我从这些人那里抢走了图书馆:
http://32feet.codeplex.com/
使用该库,添加了以下两行:
BluetoothClient client = new BluetoothClient();
BluetoothDeviceInfo[] devices = client.DiscoverDevices();这就给了我设备"DeviceName“(我的名字)和"DeviceAddress”(基本上是设备id的一大块)。
然后,我使用"ManagementObjectSearcher“查询系统,它给出了COM端口和设备ID (System.Management名称空间)的列表。
ConnectionOptions options = ProcessConnection.ProcessConnectionOptions();
ManagementScope connectionScope = ProcessConnection.ConnectionScope(Environment.MachineName, options, @"\root\CIMV2");
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PnPEntity");
ManagementObjectSearcher comPortSearcher = new ManagementObjectSearcher(connectionScope, objectQuery);
...etc as I looped over the results, pulled out the COM ports, and so on我将设备id从"ManagementObject“值映射回"devices”列表,合并结果,最后得到名称、设备id、指示它是否是蓝牙设备的标志以及蓝牙设备的“人类可读”名称(如果存在)的内容。
虽然很痛苦,但它运行得相当好。它很慢(client.DiscoverDevices()需要一段时间),但在我的例子中是可以生存的。
https://stackoverflow.com/questions/24150599
复制相似问题