从bluetoothdevice获取错误的串口名称(c#)

时间:2010-03-26 11:44:33

标签: c# serial-port bluetooth

要从系统中获取所有可用的串行端口,请使用以下命令。

SerialPort.GetPortNames

它适用于主板串口,但是使用蓝牙设备我得到了错误的端口号。

例如:有时COM70或COM7ö代替COM7。它总是1个字母。

任何建议?

PS:我在Windows 7中使用最新的Visual Studio Express PPS:切断最后一个字母的脏黑客不起作用,因为我不知道哪一个是蓝牙串口(有各种蓝牙键或设备,它改变了comport的数量),并在尝试各种棒后我到达COM10, ergo COM100或COM10f

编辑:我正在使用的代码。阅读regestry,但仍然是同样的问题。

RegistryKey myRegistry = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
foreach (string valuename in myRegistry.GetValueNames())
{
    if (myRegistry.GetValue(valuename) is String)
    {
        if (valuename.Contains("BthModem"))
        {
            richTextBox1.AppendText(">" + myRegistry.GetValue(valuename) + "<" + Environment.NewLine);
        }
    }
} 

通常,第二个或第三个请求正在处理类似

的结果
  

COM11ᯋ&LT;   COM10S&LT;   COM11&LT;   COM10&LT;   COM11&LT;   COM10&LT;

那怎么可能?

3 个答案:

答案 0 :(得分:2)

这是reported as a bug非空终止字符串:

您可以手动浏览注册表吗?

HKLM\Hardware\DeviceMap\SerialComm

答案 1 :(得分:0)

您可以利用WMI在系统中查询串口,包括蓝牙设备和USB转串口设备添加的串口。也许这样你就不会遇到这个问题。见CodeProject

答案 2 :(得分:0)

我有同样的问题。无论如何,SerialPort.GetPortNames基本上都使用了注册表 - 这两种方法似乎都不适用于蓝牙。

我目前使用的解决方法是遍历第一个X com端口并查看它们是否存在,这几乎不优雅。 MS:失败。