ОК, так что это заставляет меня гайки.Использование ManagementObjectSearcher для запроса Win32_PnPEntity возвращается пустым
Код ниже работал отлично в Windows 7 с .NET 3.5. В Windows 8.1 и .NET 4.5.1 я получаю пустой результат, но с помощью WMI Code Creator могу получить результаты.
Я ничего не могу найти об этом в Интернете.
Я хочу получить дружественные имена любых COM-портов, например. «Порт связи (COM1)».
Просто используя System.IO.Ports.SerialPort.GetPortNames()
не делайте.
Я действительно надеюсь, что кто-то знает, как это сделать. Благодаря!
using System;
using System.Collections.Generic;
using System.Management;
namespace OakHub
{
public class SerialMgmt
{
static public List<String> GetCOMDevices()
{
List<String> list = new List<String>();
ManagementScope scope = new ManagementScope(@"\\" + Environment.MachineName + @"\root\CIMV2");
SelectQuery sq = new SelectQuery("SELECT Caption FROM Win32_PnPEntity");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, sq);
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
String name = mo.ToString();
if (name.ToString().Contains("(COM"))
{
list.Add(name);
}
}
return list;
}
}
}
Это решение работает отлично! Спасибо manuchao! – greatwhitehat
Np. Но я бы сделал IEnumerable <> Method. Вы знаете, как это сделать? – C0d1ngJammer
Nopes, это в моем списке дел. К сожалению, моя новая роль дает мне меньше времени для кодирования. – greatwhitehat