Я разрабатываю решение на C # и хочу получить COM-порты, описание и friendlyName (если они Bluetooth).
После небольшого исследования я обнаружил, что могу получить COM-порты, используя WMI / CIMV2 / Win32_PnPEntity , выполнив поиск по значениям Name и Description .
Чтобы найти понятное имя, мне нужно найти на Win32_PnPSignedDriver и принять значение FriendlyName
Есть ли способ сопоставить их, чтобы получить такой список?
- COM56 - устройство Bluetooth - MyBTHDeviceName1
- COM76 - устройство Bluetooth - MyBTHDeviceName2
- COM5 - Последовательное устройство -
Я прилагаю код, который у меня есть сейчас, чтобы получить первые два поля.
// Method to retrieve the list of all COM ports.
public static List<PortInfo> FindComPorts()
{
List<PortInfo> portList = new List<PortInfo>();
ConnectionOptions options = PrepareOptions();
ManagementScope scope = PrepareScope(Environment.MachineName, options, @"\root\CIMV2");
// Prepare the query and searcher objects.
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode = 0");
ManagementObjectSearcher portSearcher = new ManagementObjectSearcher(scope, objectQuery);
using (portSearcher)
{
string caption = null;
// Invoke the searcher and search through each management object for a COM port.
foreach (ManagementObject currentObject in portSearcher.Get())
{
if (currentObject != null)
{
object currentObjectCaption = currentObject["Caption"];
if (currentObjectCaption != null)
{
caption = currentObjectCaption.ToString();
if (caption.Contains("(COM"))
{
PortInfo portInfo = new PortInfo();
portInfo.Name = caption.Substring(caption.LastIndexOf("(COM")).Replace("(", string.Empty).Replace(")", string.Empty);
portInfo.Description = caption;
portList.Add(portInfo);
}
}
}
}
}
return portList;
}
Заранее спасибо.