Как создать объект принтера в VB

Я столкнулся с проблемой в VB 6 при создании объекта принтера. По сути, мне нужно создать объект принтера, чтобы я мог установить правильный лоток, на котором должна выполняться печать.

У меня есть имя принтера со мной.

Весь код, который я могу найти в Интернете, включает в себя перебор всех доступных принтеров и поиск соответствия с именем нашего принтера.

Есть ли способ создать объект принтера prn непосредственно из имени принтера.

Любая помощь будет оценена по достоинству.


person varuog    schedule 16.11.2016    source источник
comment
VB 6 или VBA - что это?   -  person Pankaj Jaju    schedule 16.11.2016
comment
Если вы имеете в виду IDE, это VB 6.   -  person varuog    schedule 16.11.2016
comment
Итак, почему тег VBA?   -  person Pankaj Jaju    schedule 16.11.2016
comment
@PankajJaju stackoverflow. ком/вопросы/993300/   -  person varuog    schedule 16.11.2016
comment
Они могут быть похожими, но не совсем одинаковыми. Их использование очень различно.   -  person Pankaj Jaju    schedule 16.11.2016


Ответы (1)


Вы не можете. Доступ к коллекции принтеров VB6 осуществляется только по индексу, а не по имени. См. раздел Объект принтера Visual Studio 6, Коллекция принтеров.

Таким образом, вам нужно искать в коллекции принтер, который вы хотите. Например:

Private Function FindPrinter(PrinterName As String) As Printer
  Dim i As Integer
  For i = 0 To Printers.Count - 1
    If Printers(i).DeviceName = PrinterName Then
      Set FindPrinter = Printers(i)
      Exit For
    End If
  Next i
  Exit Function
End Function

Приведенное выше не подходит для ситуации, когда искомый принтер отсутствует в коллекции. Вы захотите добавить логику для покрытия этого условия - то, что вы хотите сделать, зависит от ваших конкретных задач и требований. Этот пример также представляет собой поиск по имени с учетом регистра, так что имейте это в виду.

person MarkL    schedule 16.11.2016
comment
Спасибо за ответ. Упомянутый вами код - это то, что я сейчас использую в своем приложении. Однако, когда имеется большое количество принтеров (2500+), это происходит очень медленно. Поэтому искал обходной путь. - person varuog; 17.11.2016
comment
Если вы не переключаете принтеры, вам, конечно, не нужно каждый раз выполнять поиск в коллекции принтеров. Найдите его при запуске приложения (или при выборе пользователя и т. д.), а затем сохраните эту ссылку на объект принтера, который вы используете. Тогда мало беспокойтесь о производительности при поиске в коллекции принтеров. - person MarkL; 17.11.2016