Не удается получить IP-адрес сетевого принтера?

Мне нужно найти IP-адреса установленных принтеров на моем ноутбуке. Я перемещаю свой ноутбук между разными местами и сетями. Каждая сеть имеет свой собственный набор IP-адресов. На ноутбуке установлены разные принтеры для каждого места, и все соединения осуществляются по беспроводной сети.

При использовании приведенного ниже кода (.net 4.0) QueuePort.Name возвращает:

WSD-27e3f972-cdc7-459d-b0c1-20e8410fb1db.0032 и

192.168.1.12_1

Поскольку это сетевые принтеры, я предполагаю, что они должны разрешать реальный IP-адрес??

Где я ошибаюсь? Или есть лучший способ? Мы очень ценим любую помощь.

 IEnumerable<Printer> GetLocalPrinters()
    {
        EnumeratedPrintQueueTypes[] enumerationFlags = { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections };
        LocalPrintServer printServer = new LocalPrintServer();

        var x = printServer.GetPrintQueues(enumerationFlags).Select(y =>
            new Printer
            {
                Fullname = y.FullName,          
                QueuePortName = y.QueuePort.Name,
                Location = y.Location
            })
            .OrderBy( z => z.QueuePortName);

        return x;

    }

person Alan Wayne    schedule 29.10.2014    source источник


Ответы (2)


Очередь печати имеет соответствующий порт, который обрабатывается монитором портов.

Существуют разные мониторы портов (не только стандартные мониторы вроде TCPMON и WSD, но и настраиваемые и зависящие от вендора), насколько мне известно, универсального способа справиться со всеми их видами не существует.

Судя по предоставленному имени порта, я предполагаю, что вы имеете дело с портом WSD. Здесь все становится немного сложнее, я предлагаю вам прочитать мой ответ https://stackoverflow.com/a/63705944/4700228 для решения.

person metacube    schedule 02.09.2020

person    schedule
comment
Прочтите это. Однако в моей системе Windows 7 с принтером Canon нет соответствующей записи имени в Win32_TCPIPPrinterPort. Так как же разрешить HostName? - person Alan Wayne; 29.10.2014
comment
Для принтеров, которые не отображаются в запросе порта win32_tcpipprinter, каковы соответствующие записи win32_printer? Разве вы не можете просто использовать запись Name и получить IP-адрес для части \\ServerName имени? - person m_a_s; 01.11.2014
comment
Неа. Например, принтер Canon не имеет записи имени и напрямую подключен к маршрутизатору. Его монитор не включен в стандартные записи IP-портов в реестре. Это полностью зависит от третьей стороны. - person Alan Wayne; 01.11.2014
comment
Хотя порт не указан, указан ли принтер в записях win32_printer? - person m_a_s; 01.11.2014
comment
@AlanWayne Вы когда-нибудь находили решение для поиска имени хоста, когда в Win32_TCPIPPrinterPort нет соответствующей записи? Вот я 6 лет спустя пытаюсь решить ту же проблему :) - person Vapid Linus; 18.02.2020
comment
@VapidLinus Извините, я не был. Насколько мне известно, конечной проблемой была неспособность принтеров постоянно размещать свои драйверы в рекомендуемом месте в Windows. В итоге мне пришлось читать реестр Windows напрямую. В конце концов, я просто избежал всего этого и использовал порты, поскольку Windows их распознала. Надеюсь это поможет. - person Alan Wayne; 27.02.2020