Поиск принтеров, доступных пользователю на сеансе удаленного рабочего стола (WMI) - PullRequest
0 голосов
/ 15 мая 2018

У нас есть старая система, которая печатает целую вечность, потому что VB6 проходит через все доступные принтеры, пока не найдет нужный принтер для печати.For Each xx In Printers

Проблема в том, что объект «Принтеры» загружает тонны принтеров и значительно замедляет работу программы. Я пытался использовать WMI, но не знаю, возможно ли передать объект принтера обратно. Сбой в строке CollectPrinters = objPrinter.

Public Function CollectPrinters(ByVal PrinterToUse As String) As Printer

  Dim strComputer As String
  Dim objWMIService As Object
  Dim strPrinterList As String

  strComputer = "."
  Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

  Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer WHERE Local = True AND DeviceID LIKE 'client preview%'")

  For Each objPrinter In colInstalledPrinters
    Debug.Print objPrinter.NAME
    strPrinterList = strPrinterList + objPrinter.NAME & vbCrLf
    If objPrinter.NAME = PrinterToUse Then
        'CollectPrinters = objPrinter
        Exit Function
    End If
  Next
End Function

Если я лаю не на том дереве, пожалуйста, укажите мне правильное направление.

1 Ответ

0 голосов
/ 17 мая 2018

Спасибо всем за комментарии, я нашел обходной путь. На сервере есть множество пользователей и принтеров, объект «Принтеры» выбирает каждый принтер, а не только текущий принтер. Мы также используем продукт под названием ThinPrint, который выводит предварительный просмотр на ПК пользователя. Обходной путь в основном запускает For Each xx In Printers, только если принтер по умолчанию не ThinPrint. В большинстве случаев ThinPrint используется по умолчанию, поэтому прирост производительности очень велик.

...