Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613

Узнать серийный номер удаленного принтера в сети

13.11.2019, 11:52. Показов 10864. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день!
Нашел процедуру в интернете, но не очень понимаю, как ее использовать:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub SNMPserial(ByVal ip As String)
        Try
            arrSNMP(1) = String.Empty
            Dim community As New OctetString("public")
            Dim param As New AgentParameters(community)
            param.Version = SnmpVersion.Ver1
            Dim agent As New Net.IPAddress(ip) 'IP address
            Dim target As New UdpTarget(CType(agent, System.Net.IPAddress), 161, 2000, 1)
            Dim pdu As New Pdu(PduType.Get)
            pdu.VbList.Add("1.3.6.1.2.1.43.5.1.1.17.1") 'Серийный номер
            Dim result As SnmpV1Packet = CType(target.Request(pdu, param), SnmpV1Packet)
            If result IsNot Nothing Then
                If result.Pdu.ErrorStatus <> 0 Then
                Else
                    arrSNMP(1) = (result.Pdu.VbList(0).Value.ToString()) 'Серийный номер
                End If
            End If
            target.Close()
        Catch e1 As Exception
        End Try
    End Sub
1. Ошибка на строку
VB.NET
1
arrSNMP(1) = String.Empty
Ошибка BC30451 '"arrSNMP" не объявлена. Возможно, она недоступна из-за своего уровня защиты.

2. Ошибка на строку:
VB.NET
1
       arrSNMP(1) = (result.Pdu.VbList(0).Value.ToString()) 'Серийный номер
Ошибка BC30451 '"arrSNMP" не объявлена. Возможно, она недоступна из-за своего уровня защиты.
3. Вызывать ее я понимаю так:
VB.NET
1
2
3
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        SNMPserial("ip")
    End Sub
Помогите исправить ошибки. Я хочу что бы в сообщении выводился серийный номер принтера.
Для работы используется библиотека - SnmpSharpNet
https://www.nuget.org/packages/SnmpSharpNet/
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2019, 11:52
Ответы с готовыми решениями:

Узнать серийный номер принтера
Здрям! Принтер подключен через lpt порт. Подскажите, пожалуйста, как узнать его серийниый номер. Надо именно батником, ну или...

Узнать серийный номер флешки
Всем привет, нужна помощь. Как узнать серийный номер флешки средствами VB, так же как запретить запуск приложения если серийный номер не...

Узнать серийный номер (ID) материнской платы
Есть какой-нибудь другой способ, кроме как через WIN32_BaseBoard?

38
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
19.11.2019, 16:57  [ТС]
Студворк — интернет-сервис помощи студентам
Orlangur1991, убрал проверку IF
VB.NET
1
 If pq.QueuePort.Name.StartsWith("192.168")
текст ошибки:

Помощник по отладке управляемого кода "ContextSwitchDeadlock" : "CLR не удалось перейти из COM-контекста 0x1319620 в COM-контекст 0x1319568 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."

программа задумалась..дольше отрабатывает(мне кажется правильно и выводит всю информацию) и в какой то момент вываливается на ошибку выше.
Не знаете что это такое? и как с этим борортся?
не подскаж
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
19.11.2019, 17:05
Ну по сути, убрав это условие вы просто стали обращаться ко всем принтерам в списке, не важно как называется их порт. Если там все ip адреса, то это не должно было ни на что повлиять, по поводу ошибки лучше спросить у умных людей
И покажите весь список полученных принтеров и их порты.
0
19.11.2019, 17:07

Не по теме:

adb420,

Цитата Сообщение от adb420 Посмотреть сообщение
ContextSwitchDeadlock

0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
19.11.2019, 17:32  [ТС]
Orlangur1991, дело в том, что он не отображается...
у меня идет заполнение прогресс бара до 70 % и прога вылетает
а если с if, то почему то заполняется прогремм бар так же процентов до 70, а после начинается отображение.
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
19.11.2019, 17:44
adb420, Закоментируйте весь шматок
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 If pq.QueuePort.Name.StartsWith("192.168.") Then '<-- переделать
                    'в списке есть не сетевые принтера, а придумывать нормальный отбор лень
                    SN = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.5.1.1.17.1")
 
                    Black_Toner = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.9.1.1")
                    Yellow_Toner = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.9.1.4")
                    Purple_Toner = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.9.1.3")
                    Blue_Toner = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.9.1.2")
 
                    Black_Cartrige = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.6.1.1")
                    Yellow_Cartrige = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.6.1.4")
                    Purple_Cartrige = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.6.1.3")
                    Blue_Cartrige = SNMPData(pq.QueuePort.Name, "1.3.6.1.2.1.43.11.1.1.6.1.2")
                End If
И запустите, выведет список принтеров?
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 08:19  [ТС]
Orlangur1991, да, так выводит весь список принтеров, уже пробовал.
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 08:34  [ТС]
ааа, и еще ...мы делаем отбор по пороту по IP адресу.
А у меня на принт сервере не для всех принтаков имя порта указан ip адресом.
есть имена портов, например такие:
kyocera-m2040dn-214
kyocera-m2040dn-320

Может еще в этом проблема, что он отображает только те, где указаны IP адреса в имени прорта.
см. скрин:
Миниатюры
Узнать серийный номер удаленного принтера в сети  
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 09:01  [ТС]
а если убираешь только IF то программа зависает и валиться на ошибку, которую я указал выше:
Цитата Сообщение от adb420 Посмотреть сообщение
омощник по отладке управляемого кода "ContextSwitchDeadlock" : "CLR не удалось перейти из COM-контекста 0x1319620 в COM-контекст 0x1319568 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
20.11.2019, 09:08
Окей, а как тогда одиночный запрос к принтеру вы делаете?
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 09:29  [ТС]
Orlangur1991,
Вот так. И все работает.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 Public Function SNMPData(ByVal ip As String, ByVal command As String) As String
        Dim Res As String = ""
        Try
            Dim community As New OctetString("public")
            Dim param As New AgentParameters(community) With {
                .Version = SnmpVersion.Ver1
            }
            Dim agent As New SnmpSharpNet.IpAddress(ip) 'IP address
            Dim target As New UdpTarget(CType(agent, Net.IPAddress), 161, 2000, 1)
            Dim pdu As New Pdu(PduType.Get)
            pdu.VbList.Add(command) 'не добавить сразу все в список, так как при ошибке не получить никаких данных
            Dim result As SnmpV1Packet = CType(target.Request(pdu, param), SnmpV1Packet)
            If result IsNot Nothing Then
                If result.Pdu.ErrorStatus <> 0 Then
                Else
                    Res = result.Pdu.VbList(0).Value.ToString
                End If
            End If
            target.Close()
            Return Res
        Catch ex As Exception
            Return "-"
        End Try
    End Function
 
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim Black_Toner As String
        Black_Toner = SNMPData("Имя Принтера/Ip адрес", "1.3.6.1.2.1.43.11.1.1.9.1.1")
        MsgBox(Black_Toner)
    End Sub
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
20.11.2019, 09:47
adb420, ну тогда,если вы убираете условие, то все должно работать. Выясните на каком именно порте программа падает.
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 10:39  [ТС]
Orlangur1991, если ставишь при выводе информации
VB.NET
1
MsgBox(pq.QueuePort.Name)
то отщелкивает все огонь, все отображает. при убранном ифе.
Но если убрать msgbox, вываливается на ту же ошибку.

Добавлено через 31 минуту
Orlangur1991, все разобрался. Все работает. Убрал if, сделал все это в BackgroundWorker.
всё заработало. спасибо большое за помощь!

Добавлено через 1 минуту
Orlangur1991, все разобрался. Все работает. Убрал if, сделал все это в BackgroundWorker.
всё заработало. спасибо большое за помощь!

Добавлено через 3 минуты
Orlangur1991
единственное что форма все равно зависает.
хоть и добавил в форм лоад
VB.NET
1
CheckForIllegalCrossThreadCalls = False
и скрол после завершения не фурычит, хотя колесиком мыши, все прокручивается
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
20.11.2019, 10:45
adb420, CheckForIllegalCrossThreadCalls = False не спасает от зависаний, а лишь указывает нужно ли перехватывать вызовы в ошибочном потоке.
Если все сделали в backgroundworker, то зависаний во время вызова SNMPData быть не должно, только если подвисания во время добавления в ListView.
Насчет скрола непонятно
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 12:25  [ТС]
Orlangur1991, а как узнать всю ту же самую информацию, но для одного принтера на притсервере?
пробовал указывать вот так (полный путь до него) \\ИмяПринтСервера\ИмяПритера
но не фурычит.
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
20.11.2019, 12:36
adb420, указывайте порт
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
20.11.2019, 13:48  [ТС]
Orlangur1991, имя порта тоже пытался указывать...

Добавлено через 38 минут
Orlangur1991, ошибка вылетает System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
20.11.2019, 14:46
adb420, так, не понял, вы же в 30 посте показывали сами как обращаетесь к 1 принтеру
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
22.11.2019, 09:47  [ТС]
Orlangur1991, подскажите, а как можно еще добавить ip адрес принтера?
snmp не нашел.
знаю, как можно так узнать ip адрес по хост имени:
VB.NET
1
2
3
4
 Dim ipEntry As IPHostEntry = Dns.GetHostEntry("HostName")
        Dim ipAddress As IPAddress() = ipEntry.AddressList
        Dim i As Integer = 0
        MsgBox(ipAddress(i).ToString())
как это прикрутить к коду?
0
Лень — мое второе и
 Аватар для Orlangur
3231 / 2418 / 688
Регистрация: 28.11.2014
Сообщений: 3,603
Записей в блоге: 3
22.11.2019, 10:39
adb420, ну хост имена у вас есть? Подсовываете их сюда и получаете ip
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2019, 10:39

Как узнать серийный номер винчестера?
и возможно ли такое?

Как узнать Серийный номер диска?
Как узнать серийный номер диска (например компакта)

Как можно узнать серийный номер компьютера?
Как можно узнать серийный номер компа? Пробывал через TuneUp Utilities - инфа не полная. А средствами Винды, как-нибудь можно?

Как узнать серийный номер MS Office 2013
Помогите а, ничего стандартного не нашел, Скрипта ospp.vbs в папке с офисом нет, пытался скачать софтинки, но они выдают серийники на уже...

Как программно узнать серийный номер винчестера?
Подскажите как мне программно узнать серийник винчестера. Есть ли какие-нибудь стандартные функции, которые работают под любой Windой?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru