【发布时间】:2014-09-18 09:17:10
【问题描述】:
我知道有一些关于在设备管理器上收集设备友好名称的问题,但我不能这样做,因为该设备被简单地称为“蓝牙链路 (COM) 上的标准串行”,我有很多具有相同引用的虚拟端口。我想要设备和打印机窗口中显示的设备名称:
我在 C# 中执行此操作,目前只是获取系统上可用 COM 端口的列表并从内存中选择我知道的一个。
【问题讨论】:
标签: c# visual-studio bluetooth
我知道有一些关于在设备管理器上收集设备友好名称的问题,但我不能这样做,因为该设备被简单地称为“蓝牙链路 (COM) 上的标准串行”,我有很多具有相同引用的虚拟端口。我想要设备和打印机窗口中显示的设备名称:
我在 C# 中执行此操作,目前只是获取系统上可用 COM 端口的列表并从内存中选择我知道的一个。
【问题讨论】:
标签: c# visual-studio bluetooth
我设法使用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
}
【讨论】:
通过摆弄注册表项,我设法在不使用32feet.net 库的情况下获取了蓝牙名称、地址和 COM 端口号。
然后,您可以通过传递 COM 端口号,使用 SerialPort 类连接蓝牙设备。
获取蓝牙信息的伪代码如下:
SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Devices获取
我已经在下面的链接中发布了我的代码:
【讨论】:
我正在使用我的自定义代码使用 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();
}
}
}
【讨论】: