【问题标题】:Where do I find the name displayed in "Devices and Printers"在哪里可以找到“设备和打印机”中显示的名称
【发布时间】:2014-06-10 20:50:58
【问题描述】:

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

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

如果我查看“设备管理器”列表,它只显示“蓝牙链路上的标准串行 (COM4)”,显然这对于​​识别它没有用处。

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

【问题讨论】:

    标签: c# winforms windows-7 bluetooth device


    【解决方案1】:

    【讨论】:

    • 这非常适合打印机,但不包括任何非打印机设备;我的是哪个。
    【解决方案2】:

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

    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
    

    我将“ManagementObject”值中的设备 ID 映射回“设备”列表,合并结果,最后得到具有名称、设备 ID、指示它是否是蓝牙设备的标志以及蓝牙设备中的“人类可读”名称(如果存在)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2015-09-18
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多