gpt4 book ai didi

c# - 查询 WMI WIN32_SerialPort 锁定串口

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:01 31 4
gpt4 key购买 nike

运行下面的代码会锁定我的 com 端口,我很想知道为什么。我在 SO 上发现了几个类似的悬而未决的问题......

我正在使用蓝牙适配器 (RN-41) 进行串行连接。适配器 SPP 创建两个虚拟 com 端口(这对我们测试过的所有适配器都是通用的)。 Windows 将它们标记为 Incoming 和 Outgoing,但 Incoming 是唯一实际携带串行数据的。

这给我留下了“额外的”虚拟串口。我用可用的 Com 端口填充了一个下拉列表,这样用户就可以从列表中选择要连接的端口。

在此之前,我正在过滤该列表以删除“假”com 端口。这是我的代码:

public string checkBluetoothCom()
{
string bluetoothComm = "";
List<string> badComPorts = new List<string>();
ManagementClass processClass = new ManagementClass("WIN32_SerialPort");

ManagementObjectCollection Ports = processClass.GetInstances();

foreach (ManagementObject property in Ports)
{
if (property.GetPropertyValue("Name").ToString().Contains("Bluetooth"))
{
string hardwareAddress = property.GetPropertyValue("PNPDeviceID").ToString().Split('&')[4].Split('_')[0];
if (!hardwareAddress.All(c => c == '0'))
{
bluetoothComm = property.GetPropertyValue("DeviceID").ToString();
}
else
{
badComPorts.Add(property.GetPropertyValue("DeviceID").ToString());
}
}
}

Console.WriteLine("Removing {0} items from comm port list", badComPorts.Count);
ports.RemoveAll(item => badComPorts.Contains(item));

return bluetoothComm;
}

问题是运行后我的 Com 端口被锁定,在我移除蓝牙适配器并重新启动远程设备 (RN-41) 之前我无法建立任何连接。有什么想法吗?

最佳答案

如果您查询“Win32_PnPEntity”而不是“Win32_SerialPort”并检查 COM 端口 ClassGuid {4d36e978-e325-11ce-bfc1-08002be10318},则该端口未被锁定或访问。

PowerShell 示例:

Get-WmiObject -Query "SELECT Name,DeviceID FROM Win32_PnPEntity WHERE ClassGuid=`"{4d36e978-e325-11ce-bfc1-08002be10318}`""

这给出了可以在设备管理器中找到的所有 COM 端口的列表。

来源:Finding information about all serial devices connected through USB in C#

关于c# - 查询 WMI WIN32_SerialPort 锁定串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21760445/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com