Zjištění stavu tiskáren a tiskových úloh

Postup:
Do modulu zapište:

Private Declare Function lstrcpy Lib "kernel32.dll" Alias _
   "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long

Private Declare Function lstrlen Lib "kernel32.dll" Alias _
   "lstrlenA" (ByVal lpString As Long) As Long

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32

Private Type ACL
   AclRevision As Byte
   Sbz1 As Byte
   AclSize As Integer
   AceCount As Integer
   Sbz2 As Integer
End Type

Private Type DEVMODE
   dmDeviceName As String * CCHDEVICENAME
   dmSpecVersion As Integer
   dmDriverVersion As Integer
   dmSize As Integer
   dmDriverExtra As Integer
   dmFields As Long
   dmOrientation As Integer
   dmPaperSize As Integer
   dmPaperLength As Integer
   dmPaperWidth As Integer
   dmScale As Integer
   dmCopies As Integer
   dmDefaultSource As Integer
   dmPrintQuality As Integer
   dmColor As Integer
   dmDuplex As Integer
   dmYResolution As Integer
   dmTTOption As Integer
   dmCollate As Integer
   dmFormName As String * CCHFORMNAME
   dmUnusedPadding As Integer
   dmBitsPerPel As Integer
   dmPelsWidth As Long
   dmPelsHeight As Long
   dmDisplayFlags As Long
   dmDisplayFrequency As Long
End Type

Private Type SECURITY_DESCRIPTOR
   Revision As Byte
   Sbz1 As Byte
   Control As Long
   Owner As Long
   Group As Long
   Sacl As ACL
   Dacl As ACL
End Type


Private Type PRINTER_INFO_2
   pServerName As String
   pPrinterName As String
   pShareName As String
   pPortName As String
   pDriverName As String
   pComment As String
   pLocation As String
   pDevMode As DEVMODE
   pSepFile As String
   pPrintProcessor As String
   pDatatype As String
   pParameters As String
   pSecurityDescriptor As SECURITY_DESCRIPTOR
   Attributes As Long
   Priority As Long
   DefaultPriority As Long
   StartTime As Long
   UntilTime As Long
   Status As Long
   cJobs As Long
   AveragePPM As Long
End Type

Private Declare Function EnumPrinters Lib "winspool.drv" Alias _
   "EnumPrintersA" (ByVal flags As Long, ByVal name As String, _
   ByVal Level As Long, pPrinterEnum As Long, _
   ByVal cdBuf As Long, pcbNeeded As Long, _
   pcReturned As Long) As Long

Const PRINTER_ENUM_LOCAL = &H2
Const PRINTER_ENUM_CONNECTIONS = &H4


Na formulář přidejte tlačítko a na jeho událost Click:

Private Sub Command1_Click()

   Dim longbuffer() As Long 
   Dim printinfo() As PRINTER_INFO_2
   Dim numbytes As Long 
   Dim numneeded As Long 
   Dim numprinters As Long 
   Dim c As Integer, retval As Long 

   
' Zjištění informací o lokálních tiskárnách
   numbytes = 3076
   ReDim longbuffer(0 To numbytes / 4) As Long 

   retval = EnumPrinters(PRINTER_ENUM_LOCAL Or _
   PRINTER_ENUM_CONNECTIONS, "", 2, longbuffer(0), _
   numbytes, numneeded, numprinters)

   If retval = 0 Then
      Exit Sub
   End If

   ReDim printinfo(0 To numprinters - 1) As PRINTER_INFO_2
   
   For c = 0 To numprinters - 1 
      printinfo(c).pPrinterName = Space(lstrlen(longbuffer(21 * c + 1)))
      retval = lstrcpy(printinfo(c).pPrinterName, longbuffer(21 * c + 1))
      printinfo(c).Status = longbuffer(21 * c + 18)
      printinfo(c).cJobs = longbuffer(21 * c + 19)
   Next c

   For c = 0 To numprinters - 1
      Debug.Print printinfo(c).pPrinterName; " Stav: "; printinfo(c).Status
      Debug.Print "Počet úloh: "; printinfo(c).cJobs
   Next c

End Sub

Zpět

Autor: The Bozena