我在哪里找到“设备和打印机”中显示的名称?

本文关键字:显示 打印机 在哪里 | 更新日期: 2023-09-27 18:07:56

我有一个通过蓝牙连接的串行设备。它在COM4上表现得很好。我可以毫无问题地与它通信。

我想让用户更容易找到它(理想情况下,我将自动检测它),所以我想通过名称找到它。在"设备和打印机"列表中,我得到了一个有效的名称,这是完美的。然而,我似乎无法通过编程找到这个值。我已经尝试了大量的东西使用"managementtobjectsearcher"类,包括列出所有的属性和系统属性,但没有值匹配的名称显示在"设备和打印机"。

如果我在"设备管理器"列表中查看,它只是显示"标准串行蓝牙链接(COM4)",这显然对识别它是没有用的。

那么我到底如何得到"设备和打印机"列表中显示的名称?

我在哪里找到“设备和打印机”中显示的名称?

这是你要找的吗?

http://msdn.microsoft.com/en-us/library/system.drawing.printing.printersettings.installedprinters (v = vs.110) . aspx

所以,我找到了一个解决方案。我从这些家伙那里抢到了图书馆:

http://32feet.codeplex.com/

使用该库,添加以下两行:
BluetoothClient client = new BluetoothClient();
BluetoothDeviceInfo[] devices = client.DiscoverDevices();

这给了我设备"DeviceName"(我所追求的名称)和"DeviceAddress"(基本上是设备id的一个块)。

然后,我使用"管理对象搜索器"查询系统,它给了我一个COM端口和设备id列表(system。管理名称空间).

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映射回"设备"列表,合并结果,并最终得到具有名称,设备id,指示它是否是蓝牙设备的标志以及来自蓝牙设备的"人类可读"名称(如果存在)的东西。

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