查找远程桌面会话 (WMI) 上用户可用的打印机
Posted
技术标签:
【中文标题】查找远程桌面会话 (WMI) 上用户可用的打印机【英文标题】:Lookup Printers Available to User on Remote Desktop Session (WMI) 【发布时间】:2018-05-15 09:46:46 【问题描述】:我们有一个需要很长时间才能打印的旧系统,因为 VB6 会循环遍历每台可用的打印机,直到找到合适的打印机进行打印。
For Each xx In Printers
问题在于 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
如果我找错树了,请指出正确的方向。
【问题讨论】:
在我的会计应用程序中,我只是循环浏览系统打印机集合并将它们放在一个组合框中,并允许我的用户按用户为每个功能选择他们想要的打印机 - 发票、支票、声明等。这是您必须定期提示的内容,而不是预先选择打印机的选项吗? “它崩溃了”但具体是什么错误? 我想它会是“类型不匹配”,因为我不明白为什么 objPrinter 会是“打印机”类型。 我不得不承认我很困惑为什么遍历“打印机”会这么慢。你能给出一个代码示例来说明你是如何使用它的吗? 【参考方案1】:感谢大家的cmets,我想出了一个解决方法。服务器有大量的用户和打印机,Printers 对象获取每台打印机,而不仅仅是当前的打印机。我们还使用了一款名为 ThinPrint 的产品,它可以向用户 PC 输出预览。如果默认打印机不是 ThinPrint,解决方法基本上只运行For Each xx In Printers
。在大多数情况下,ThinPrint 是默认设置,因此性能提升很大。
【讨论】:
以上是关于查找远程桌面会话 (WMI) 上用户可用的打印机的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 Win32_Printer.Default 字段,以便在远程使用 WMI 时返回正确的值?
使用 WMI 远程删除 Windows 7 网络打印机驱动程序