2016-11-18 4 views
0

Je dois être en mesure de récupérer (par programmation via C#) certaines informations disponibles via le Gestionnaire de périphériques Windows. Plus précisément, je fais référence à des informations sur l'onglet Détails d'une boîte de dialogue Propriétés du périphérique. Dans mon cas, j'ai besoin de récupérer la propriété "Location Information" pour les cartes réseau sur le PC. Idéalement, je préférerais le faire en utilisant un appel d'API via WMI ou similaire, mais je n'ai pas été en mesure de trouver ou comprendre comment faire pour cela. Quoi qu'il en soit, si quelqu'un a des informations sur la façon de le faire en utilisant soit DevCon ou une série d'appels API, j'apprécierais grandement toute aide. J'ai trouvé un exemple de code dans un autre article here (que j'ai copié ci-dessous) mais cela ne m'a pas donné l'information que je cherche.Récupération par programme des «informations d'emplacement» de l'adaptateur réseau à partir de l'onglet Détails du gestionnaire de périphériques

 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; 
       } 
      } 

Répondre

0

Je l'ai compris moi-même! J'ai utilisé la réponse affichée here et juste modifié légèrement en ajoutant une ligne de code juste après où il a eu l'appel suivant:

string desc = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC); 

I ajouté ce qui suit:

string locationInformation = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_LOCATION_INFORMATION); 

Merci beaucoup à la Personne d'origine (@domskey) qui a posté et répondu à ce message. Je ne sais pas s'il a écrit tout ce code ou pas. Il y a pas mal de classes pour supporter les appels SetupAPI.dll. M'a sauvé une tonne de temps!