Программно получить сетевой адаптер "Информация о местоположении" из вкладки Сведения диспетчера устройств
Мне нужно иметь возможность получать (программно через C#) некоторую информацию, доступную через диспетчер устройств Windows. В частности, я имею в виду информацию на вкладке "Сведения" диалогового окна "Свойства устройства". В моем случае мне нужно получить свойство "Информация о местоположении" для сетевых адаптеров на ПК. В идеале, я бы предпочел сделать это с помощью вызова API через WMI или аналогичный, но не смог найти или выяснить, как это сделать. В любом случае, если у кого-то есть какая-либо информация о том, как это сделать с помощью DevCon или ряда вызовов API, я был бы очень признателен за любую помощь. Я нашел образец кода в другом посте здесь (который я скопировал ниже), но это не дало мне информацию, которую я ищу.
private static void test()
{
ManagementPath path = new ManagementPath();
ManagementClass devs = null;
path.Server = ".";
path.NamespacePath = @"root\CIMV2";
path.RelativePath = @"Win32_PnPentity";
System.IO.File.Delete(fileName);
using (devs = new ManagementClass(new ManagementScope(path), path, new ObjectGetOptions(null, new TimeSpan(0, 0, 0, 2), true)))
{
ManagementObjectCollection moc = devs.GetInstances();
foreach (ManagementObject mo in moc)
{
try
{
PropertyDataCollection devsProperties = mo.Properties;
foreach (PropertyData devProperty in devsProperties)
{
if (devProperty.Type == CimType.DateTime)
{
if (devProperty.Value != null)
{
Console.WriteLine("Date {0}", ToDateTime(devProperty.Value.ToString()));
System.IO.File.AppendAllText(fileName, "Date " + ToDateTime(devProperty.Value.ToString()) + Environment.NewLine);
}
}
else
{
Console.WriteLine("Property = {0}\t Value = {1}", devProperty.Name, devProperty.Value);
System.IO.File.AppendAllText(fileName, "Property = " + devProperty.Name + "\t Value = " + devProperty.Value + Environment.NewLine);
}
}
if (String.IsNullOrEmpty(mo["DeviceID"].ToString()))
{
System.IO.File.AppendAllText(fileName, "Device ID was NULL" + Environment.NewLine);
Console.WriteLine("****** Device ID was NULL ******");
continue;
}
int count = 0;
RelatedObjectQuery relatedQuery;
try
{
relatedQuery = new RelatedObjectQuery("associators of {Win32_PnPEntity.DeviceID='" + mo["DeviceID"] + "'}");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ManagementScope(path), relatedQuery);
foreach (ManagementObject mob in searcher.Get())
{
System.IO.File.AppendAllText(fileName, "--------------------------->>>>>>" + Environment.NewLine);
Console.WriteLine("--------------------------->>>>>>");
System.IO.File.AppendAllText(fileName, mob["Description"].ToString() + Environment.NewLine);
Console.WriteLine(mob["Description"]);
++count;
}
}
catch (Exception fEx)
{
string temp = fEx.Message;
continue;
}
System.IO.File.AppendAllText(fileName, "----------------------" + Environment.NewLine);
Console.WriteLine("----------------------");
}
catch (Exception fEx)
{
string temp = fEx.Message;
}
}
1 ответ
Я понял это сам! Я использовал ответ, опубликованный здесь, и просто немного его изменил, добавив одну строку кода сразу после того, как у него был следующий вызов:
string desc = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC);
Я добавил следующее:
string locationInformation = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_LOCATION_INFORMATION);
Большое спасибо оригинальному человеку (@domskey), который разместил и ответил на этот пост. Не уверен, написал ли он весь этот код или нет. Там довольно много классов для поддержки вызовов SetupAPI.dll. Сэкономила мне кучу времени!