Private Declare Function apiEnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" (ByVal Flags As Long, ByVal Name As String, ByVal Level As Long, pPrinterEnum As Byte, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Function apiEnumPorts Lib "winspool.drv" Alias "EnumPortsA" (ByVal pName As String, ByVal Level As Long, lpbPorts As Byte, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Function apiEnumMonitors Lib "winspool.drv" Alias "EnumMonitorsA" (ByVal pName As String, ByVal Level As Long, pMonitors As Byte, ByVal cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
' Retrieves a collection of printer objects
Public Function EnumPrinters(Flags As Long, Name As String, Level As Long) As Collection
Dim needed&
Dim returned&
Dim res&
Dim tbt As Byte
Dim usename$
Dim cprinters As New Collection
Dim x&
Dim ppi As dwPrinterInfo
If Name$ = "" Then usename$ = vbNullString Else usename$ = Name