我在哪里可以找到"设备和打印机"中显示的名称?

时间:2014-06-10 20:50:59

标签: c# winforms windows-7 bluetooth device

我有通过蓝牙连接的串行设备。它在COM4上很好地显示出来。我可以毫无问题地与之沟通。

我想让用户更容易找到(理想情况下,我会自动检测它),所以我想通过名字找到它。在“设备和打印机”列表中,我得到一个有效的名称,这是完美的。但是,我似乎无法以编程方式找到这个值。我使用“ManagementObjectSearcher”类尝试了大量的东西,包括列出所有的Properties和SystemProperties,但没有值与“Devices and Printers”中显示的名称相匹配。

如果我查看“设备管理器”列表,它只显示“标准串行蓝牙链接(COM4)”,这显然无法识别它。

那么我如何获得“设备和打印机”列表中显示的名称?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

所以,我找到了解决方案。我抓住了这些家伙的图书馆:

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”值映射回“设备”列表,合并结果,最后得到的东西有名称,设备ID,标志是否是蓝牙设备,以及蓝牙设备中的“人类可读”名称(如果存在)。

痛苦,但效果相当好。它很慢(client.DiscoverDevices()需要一段时间),但在我的情况下这是可以存活的。