【发布时间】: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 会是“打印机”类型。
-
我不得不承认我很困惑为什么遍历“打印机”会这么慢。你能给出一个代码示例来说明你是如何使用它的吗?