2011-02-08 19 views
4

我正在製作一個應用程序,需要使用它們的IO地址列出機器中的所有LPT端口。 (即它的輸出:LPT1 [開始;結束] ....)C#+ WMI + LPT幫助!

使用WMI,您可以獲得此信息.. Win32_ParallelPort中的名稱/號碼和Win32_PortResource中的地址。

問題是我不知道如何將端口名與它的地址相關聯。

+1

這個問題是關於德爾福,但你應該能夠從它提取關於你的問題的WMI方面很多有用的信息:http://stackoverflow.com/questions/2386169 /如何找到的可用並行端口,和他們-IO-使用 - 德爾福和WMI地址, –

回答

1

您必須三次查詢並遍歷結果以獲取來自ParallelPort,PnPAllocatedResource和PortResource的匹配記錄。下面的代碼確實如此:

var parallelPort = new ManagementObjectSearcher("Select * From Win32_ParallelPort"); 
//Dump(parallelPort.Get()); 
foreach (var rec in parallelPort.Get()) 
{  
    var wql = "Select * From Win32_PnPAllocatedResource"; 
    var pnp = new ManagementObjectSearcher(wql); 

    var searchTerm = rec.Properties["PNPDeviceId"].Value.ToString(); 
    // compensate for escaping 
    searchTerm = searchTerm.Replace(@"\", @"\\"); 

    foreach (var pnpRec in pnp.Get()) 
    { 
     var objRef = pnpRec.Properties["dependent"].Value.ToString(); 
     var antref = pnpRec.Properties["antecedent"].Value.ToString(); 

     if (objRef.Contains(searchTerm)) 
     { 
      var wqlPort = "Select * From Win32_PortResource"; 
      var port = new ManagementObjectSearcher(wqlPort); 
      foreach (var portRec in port.Get()) 
      { 
       if (portRec.ToString() == antref) 
       { 
        Console.WriteLine("{0} [{1};{2}]", 
         rec.Properties["Name"].Value, 
         portRec.Properties["StartingAddress"].Value, 
         portRec.Properties["EndingAddress"].Value); 
       } 
      } 
     } 
    } 
}