c# - 判断串口是普通COM还是SPP

标签 c# bluetooth serial-port

我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM,也称为 COM 设备的电缆替代蓝牙适配器。

我有一个设备可以同时使用 USB(COM -> USB)和蓝牙,并且蓝牙接口(interface)可以与 SPP 一起使用。

我目前正在使用 System.IO.Ports.SerialPort.GetPortNames() 获取 COM。

有没有办法判断是蓝牙连接还是USB连接?

解决方案:

System.Management.ManagementObjectSearcher Searcher = new System.Management.ManagementObjectSearcher("Select * from WIN32_SerialPort");
foreach (System.Management.ManagementObject Port in Searcher.Get())
{
    foreach (System.Management.PropertyData Property in Port.Properties)
    {
        Console.WriteLine(Property.Name + " " + (Property.Value == null ? null : Property.Value.ToString()));
    }
}

输出类似:

Availability 2
Binary True
Capabilities 
CapabilityDescriptions 
Caption Standard Serial over Bluetooth link (COM10)
ConfigManagerErrorCode 0
ConfigManagerUserConfig False
CreationClassName Win32_SerialPort
Description Standard Serial over Bluetooth link
DeviceID COM10
ErrorCleared 
ErrorDescription 
InstallDate 
LastErrorCode 
MaxBaudRate 9600
MaximumInputBufferSize 0
MaximumOutputBufferSize 0
MaxNumberControlled 
Name Standard Serial over Bluetooth link (COM10)
OSAutoDiscovered True
PNPDeviceID BTHENUM\{00001101-0000-1000-8000-00805F9B34FB}_LOCALMFG&0000\8&3062A492&0&000000000000_0000001C
PowerManagementCapabilities System.UInt16[]
PowerManagementSupported False
ProtocolSupported 
ProviderType RS232 Serial Port
SettableBaudRate True
SettableDataBits True
SettableFlowControl True
SettableParity True
SettableParityCheck False
SettableRLSD True
SettableStopBits True
Status OK
StatusInfo 3
Supports16BitMode False
SupportsDTRDSR True
SupportsElapsedTimeouts True
SupportsIntTimeouts True
SupportsParityCheck False
SupportsRLSD True
SupportsRTSCTS True
SupportsSpecialCharacters False
SupportsXOnXOff False
SupportsXOnXOffSet False
SystemCreationClassName Win32_ComputerSystem
SystemName JVALDRON-PC
TimeOfLastReset 

最佳答案

您无法通过 SerialPort 类找到此信息。您需要执行 WMI 查询。

按照这个思路做一些事情可能会导致你达到它

ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * 
                                      from WIN32_SerialPort");

foreach(ManagementObject Port in searcher.Get()) {

       string a = (string) Port.GetPropertyValue("Name");

}

我还没有加载这段代码,所以我不知道您可以获得哪些进一步的属性。但是,如果有的话,WMI 将是实现它的方式。

关于c# - 判断串口是普通COM还是SPP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563107/

相关文章:

c# - Unity3D:相机无法使用第一人称脚本移动

java - Android 中使用蓝牙进行数据传输

c# - 捕获文件在 C# 中通过蓝牙发送

c - 从串行端口读取时使用 sleep()

c - 用串口编程C读取多个传感器

为两个 SC2681 DUART 配置内核驱动程序

c# - 如果 MediaPlayer 处于全屏模式,DwmGetWindowAttribute 无法获得正确的 Rect 大小

c# - 如果 web.config 丢失或损坏,防止 YSOD?

c# - ADO.NET - Size 属性的大小无效,为 0

ios - 返回查看 Controller 时,Core Bluetooth 不会恢复