C # + WMI + LPT помогите! - PullRequest
       12

C # + WMI + LPT помогите!

4 голосов
/ 08 февраля 2011

Я делаю приложение, которое должно перечислить все порты LPT на машине с их адресами ввода-вывода.(т.е. это вывод: LPT1 [начало; конец] ....)

Используя WMI, вы можете получить эту информацию ... имя / номер из Win32_ParallelPort и адреса из Win32_PortResource.

Проблема в том, что я не знаю, как связать имя порта с его адресами.

1 Ответ

1 голос
/ 11 января 2014

Вам нужно выполнить три запроса и просмотреть результаты, чтобы получить соответствующие записи из 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 );
                }
            }
        }
    }
}
...