2016-11-18 8 views
0

Windows 장치 관리자를 통해 사용할 수있는 정보 중 일부를 검색 할 수 있어야합니다 (C#을 통해 프로그래밍 방식으로). 특히 Device Properties 대화 상자의 Details 탭에 대한 정보를 언급하고 있습니다. 제 경우에는 PC의 네트워크 어댑터에 대한 "위치 정보"속성을 검색해야합니다. 이상적으로는 WMI 또는 유사한 방법을 통해 API 호출을 사용하여이를 수행하는 것을 선호하지만 그 방법을 찾거나 파악할 수 없었습니다. 어쨌든, 누군가 DevCon 또는 일련의 API 호출을 사용하여이 작업을 수행하는 방법에 대한 정보를 얻는다면 어떤 도움을 주시면 감사하겠습니다. 다른 게시물 here (아래에서 복사 한 코드)의 코드 샘플을 찾았지만 찾고있는 정보를 제공하지 않았습니다.장치 관리자 세부 정보 탭에서 프로그래밍 방식으로 네트워크 어댑터 "위치 정보"검색

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

답변

0

나는 그것을 스스로 알아 냈습니다! 받는 사람

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

고마워 :

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

나는 다음과 같은 추가 : 나는 대답은 here을 게시 바로 그 다음 호출을 한 곳 한 후 한 줄의 코드를 추가하여 약간 수정 사용 게시하고 그 게시물에 응답 한 원래 사람 (@domskey). 그가 모든 코드를 작성했는지 여부는 확실하지 않습니다. SetupAPI.dll 호출을 지원하는 클래스가 꽤 있습니다. 나에게 1 톤의 시간을 절약했다!