VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "dwSpool" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False ' Desaware API Class library ' Copyright (c) 1995-1997 by Desaware ' All rights reserved ' Preliminary demonstration edition Option Explicit 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 res& = apiEnumPrinters(Flags, usename$, Level, tbt, 0, needed, returned) If needed& = 0 Then Set EnumPrinters = cprinters Exit Function End If ReDim ResultBuffer(needed) As Byte res& = apiEnumPrinters(Flags, usename$, Level, ResultBuffer(0), needed, needed, returned) ' Now enumerate create an object for each printer structure For x = 1 To returned Set ppi = New dwPrinterInfo Call ppi.LoadInfo(ResultBuffer(0), Level, x - 1) cprinters.Add ppi Next x Set EnumPrinters = cprinters End Function ' Retrieves a collection of printer objects Public Function EnumPorts(Server As String, Level As Long) As Collection Dim needed& Dim returned& Dim res& Dim tbt As Byte Dim useserver$ Dim cports As New Collection Dim x& Dim ppi As dwPortInfo If Server$ = "" Then useserver$ = vbNullString Else useserver$ = Server res& = apiEnumPorts(useserver, Level, tbt, 0, needed, returned) If needed& = 0 Then Set EnumPorts = cports Exit Function End If ReDim ResultBuffer(needed) As Byte res& = apiEnumPorts(useserver, Level, ResultBuffer(0), needed, needed, returned) Debug.Print GetLastError() ' Now enumerate create an object for each printer structure For x = 1 To returned Set ppi = New dwPortInfo Call ppi.LoadInfo(ResultBuffer(0), Level, x - 1) cports.Add ppi Next x Set EnumPorts = cports End Function ' Retrieves a collection of monitor objects Public Function EnumMonitors(Server As String, Level As Long) As Collection Dim needed& Dim returned& Dim res& Dim tbt As Byte Dim useserver$ Dim cmonitors As New Collection Dim x& Dim ppi As dwPrintMonitor If Server$ = "" Then useserver$ = vbNullString Else useserver$ = Server res& = apiEnumPorts(useserver, Level, tbt, 0, needed, returned) If needed& = 0 Then Set EnumMonitors = cmonitors Exit Function End If ReDim ResultBuffer(needed) As Byte res& = apiEnumMonitors(useserver, Level, ResultBuffer(0), needed, needed, returned) Debug.Print GetLastError() ' Now enumerate create an object for each printer structure For x = 1 To returned Set ppi = New dwPrintMonitor Call ppi.LoadInfo(ResultBuffer(0), Level, x - 1) cmonitors.Add ppi Next x Set EnumMonitors = cmonitors End Function