我有通过蓝牙连接的串行设备。它在COM4上很好地显示出来。我可以毫无问题地与之沟通。
我想让用户更容易找到(理想情况下,我会自动检测它),所以我想通过名字找到它。在“设备和打印机”列表中,我得到一个有效的名称,这是完美的。但是,我似乎无法以编程方式找到这个值。我使用“ManagementObjectSearcher”类尝试了大量的东西,包括列出所有的Properties和SystemProperties,但没有值与“Devices and Printers”中显示的名称相匹配。
如果我查看“设备管理器”列表,它只显示“标准串行蓝牙链接(COM4)”,这显然无法识别它。
那么我如何获得“设备和打印机”列表中显示的名称?
答案 0 :(得分:0)
答案 1 :(得分:0)
所以,我找到了解决方案。我抓住了这些家伙的图书馆:
使用该库,添加以下两行:
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”值映射回“设备”列表,合并结果,最后得到的东西有名称,设备ID,标志是否是蓝牙设备,以及蓝牙设备中的“人类可读”名称(如果存在)。
痛苦,但效果相当好。它很慢(client.DiscoverDevices()需要一段时间),但在我的情况下这是可以存活的。