【问题标题】:Get name of bluetooth device on the Devices and Printers window在“设备和打印机”窗口中获取蓝牙设备的名称
【发布时间】:2014-09-18 09:17:10
【问题描述】:

我知道有一些关于在设备管理器上收集设备友好名称的问题,但我不能这样做,因为该设备被简单地称为“蓝牙链路 (COM) 上的标准串行”,我有很多具有相同引用的虚拟端口。我想要设备和打印机窗口中显示的设备名称:

我在 C# 中执行此操作,目前只是获取系统上可用 COM 端口的列表并从内存中选择我知道的一个。

【问题讨论】:

    标签: c# visual-studio bluetooth


    【解决方案1】:

    我设法使用32Feet.Net 让它工作。

    您可以通过以下方式搜索设备

        BluetoothClient client = new BluetoothClient();
            devices = client.DiscoverDevicesInRange();
            foreach (BluetoothDeviceInfo d in devices)
            {
                items.Add(d.DeviceName);
            }
    

    这将提供您在“设备和打印机”窗口中看到的友好名称列表,而不是“蓝牙链路上的标准串行”。

    如果您想要像我一样的 COM 端口或任何其他信息,那么您可以简单地执行 WMI 查询,例如

        System.Management.ManagementObjectSearcher Searcher = new System.Management.ManagementObjectSearcher("Select * from WIN32_SerialPort");
            foreach (System.Management.ManagementObject Port in Searcher.Get())
            {
                 //your comparison or code here
            }
    

    【讨论】:

    • 蓝牙有两个Com口,一个进一个出。我们如何确定哪个是传入的,哪个是传出的? @Ryanas
    【解决方案2】:

    通过摆弄注册表项,我设法在不使用32feet.net 库的情况下获取了蓝牙名称、地址和 COM 端口号。

    然后,您可以通过传递 COM 端口号,使用 SerialPort 类连接蓝牙设备。

    获取蓝牙信息的伪代码如下:

    • 枚举 PNP 中所有可用的 COM 端口
    • 获取设备类Guid
    • 从classGuid中搜索蓝牙地址
    • 当蓝牙地址已知时,蓝牙名称可以从-这个注册表SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Devices获取

    我已经在下面的链接中发布了我的代码:

    https://stackoverflow.com/a/36298213/2297825

    【讨论】:

      【解决方案3】:

      我正在使用我的自定义代码使用 32feet.Net 库,它可以帮助我在 C# 控制台应用程序中获取设备友好名称以及该设备附加的 COM 端口信息。

      我正在使用下面的代码来检测黄玉签名设备,它的友好名称是“T-S460-BT2”。你可以替换这个

      string FriendlyDeviceName = "T-S460-BT2";

      在带有您要搜索的设备名称的代码中。

      using InTheHand.Net;
      using InTheHand.Net.Bluetooth;
      using InTheHand.Net.Bluetooth.Widcomm;
      using InTheHand.Net.Sockets;
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Management;
      using System.Text;
      using System.Text.RegularExpressions;
      
      namespace SearchDevice
      {
          class Program
          {
              static void Main(string[] args)
              {
      
                  string FriendlyDeviceName =  "T-S460-BT2";
      
                  if (BluetoothRadio.IsSupported)
                  {
                      BluetoothClient client = new BluetoothClient();
                      BluetoothDeviceInfo[] devices;
                      devices = client.DiscoverDevicesInRange();
                      foreach (BluetoothDeviceInfo d in devices)
                      {
                          if (Regex.IsMatch(d.DeviceName, FriendlyDeviceName, RegexOptions.IgnoreCase))
                          {
                              try
                              {
                                  string query = string.Format("SELECT Name, DeviceID, PNPDeviceID from WIN32_SerialPort");
                                  ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
                                  ManagementObjectCollection osDetailsCollection = searcher.Get();
                                  foreach (ManagementObject mo in osDetailsCollection)
                                  {
                                      string PNPDeviceID = (string)mo.GetPropertyValue("PNPDeviceID");
                                      if (PNPDeviceID != null && Regex.IsMatch(PNPDeviceID, d.DeviceAddress + "", RegexOptions.IgnoreCase))
                                      {
                                          Console.WriteLine("{0}", ((string)mo.GetPropertyValue("DeviceId")).Replace("COM", ""));
                                      }
                                  }
                              }
                              catch (Exception exx)
                              {
      
                              }
                          }
                      }
                  }
                  else
                  {
                      Console.WriteLine("Not Supported");
                  }
      
                  Console.ReadLine();
      
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        • 2020-07-02
        • 2015-12-26
        • 1970-01-01
        相关资源
        最近更新 更多