vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Drucken22.03.05
EnumJobs-Funktion

Diese Funktion ermittelt die aktuell zu druckenden Druckaufträge des Spoolmanagers.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  8.539 

Deklaration:

Declare Function EnumJobs Lib "winspool.drv" _
  Alias "EnumJobsA" ( _
  ByVal hPrinter As Long, _
  ByVal FirstJob As Long, _
  ByVal NoJobs As Long, _
  ByVal Level  As Long, _
  pJob As Long, _
  ByVal cbBuf As Long, _
  pcbNeeded As Long, _
  pcReturned  As Long) As Long

Beschreibung:
Diese Funktion ermittelt die aktuell zu druckenden Druckaufträge des Spoolmanagers.

Parameter:
hPrinterErwartet das Handle eines Druckers, der per OpenPrinter-Funktion geöffnet wurde.
FirstJobErwartet den 0-basierenden Index des Druckauftrages, an dem begonnen werden soll zuenumerieren.
NoJobsErwartet die maximale Anzahl an Druckaufträgen, die ermittelt werden sollen.
LevelErwartet einen Wert der die Struktur beschreibt, in der die Daten kopiert werden sollen. Wird hier derWert "1" übergeben, werden in den Puffer die Informationen in JOB_INFO_1-Strukturen abgelegt. DerWert "2" legt fest, dass die Daten in JOB_INFO_2-Strukturen in den Puffer kopiert werden.
pJobErwartet einen Puffer der groß genug ist, um alle zu ermittelnde Daten zu empfangen. Alternativ kann hier auch derWert "0" übergeben werden, wenn nur die Größe des benötigten Puffer ermittelt werden soll.
cbBufErwartet die Größe des Puffers in Bytes. Wurde bei "pJob" derWert "0" übergeben so wird auch hier der Wert "0" erwartet.
pcbNeededWurde bei "pJob" und "cbBuf" derWert "0" übergeben, so wird diese Variable mit der benötigten Größe des Puffers gefüllt. Andernfalls wird dieseVariable mit der Anzahl der Bytes gefüllt, die in den Puffer kopiert worden sind.
pcReturnedDiese Variable wird mit der Anzahl der Druckaufträge gefüllt, die in den Puffer kopiert worden sind.

Rückgabewert:
Ist die Funktion erfolgreich, so liefert sie einen Wert "ungleich 0", andernfalls wird derWert "0" zurückgegeben. Für erweiterte Fehlerinformationen können Sie die GetLastError-Funktion aufrufen.

Beispiel:

Private Declare Function OpenPrinter Lib "winspool.drv" _
  Alias "OpenPrinterA" ( _
  ByVal pPrinterName As String, _
  phPrinter As Long, _
  pDefault  As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" ( _
  ByVal hPrinter As Long) As Long
Private Declare Function EnumJobs Lib "winspool.drv" _
  Alias "EnumJobsA"  ( _
  ByVal hPrinter As Long, _
  ByVal FirstJob As Long, _
  ByVal NoJobs As Long, _
   ByVal Level As Long, _
  pJob As Long, _
  ByVal cbBuf As Long, _
  pcbNeeded As Long, _
   pcReturned As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  pDst  As Any, _
  pSrc As Any, _
  ByVal ByteLen As Long)
Private Declare Function lstrlen Lib "kernel32" _
  Alias "lstrlenA" ( _
  ByVal lpString As Any) As Long
 
Private Type DEVMODE
  dmDeviceName As String * 32
  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 * 32
  dmUnusedPadding As Integer
  dmBitsPerPel As Long
  dmPelsWidth As Long
  dmPelsHeight As Long
  dmDisplayFlags As Long
  dmDisplayFrequency As Long
  dmICMMethod As Long
  dmICMIntent As Long
  dmMediaType As Long
  dmDitherType As Long
  dmReserved1 As Long
  dmReserved2 As Long
  dmPanningWidth As Long
  dmPanningHeight As Long
End Type
 
Private Type SYSTEMTIME
  wYear As Integer
  wMonth As Integer
  wDayOfWeek As Integer
  wDay As Integer
  wHour As Integer
  wMinute As Integer
  wSecond As Integer
  wMilliseconds As Integer
End Type
 
Private Type JOB_INFO_2
  JobId As Long
  pPrinterName As String
  pMachineName As String
  pUserName As String
  pDocument As String
  pNotifyName As String
  pDatatype As String
  pPrintProcessor As String
  pParameters As String
  pDriverName As String
  pDevMode As DEVMODE
  pStatus As String
  pSecurityDescriptor As Long
  Status As Long
  Priority As Long
  Position As Long
  StartTime As Long
  UntilTime As Long
  TotalPages As Long
  Size As Long
  Submitted As SYSTEMTIME
  Time As Long
  PagesPrinted As Long
End Type
 
' JOB_INFO_2 Status-Konstanten
Private Const JOB_STATUS_BLOCKED_DEVQ = &H200 ' Der Treiber kann die Aktion nicht fortsetzen
Private Const JOB_STATUS_DELETED = &H100 ' Der Druckauftrag wurde gelöscht
Private Const JOB_STATUS_DELETING = &H4 ' Der Druckauftrag wird gelöscht
Private Const JOB_STATUS_ERROR = &H2 ' Ein Fehler ist bei dem Druckauftrag aufgetreten 
Private Const JOB_STATUS_OFFLINE = &H20 ' Der Ausdruck kann nicht fortgesetzt werden,  
' weil der Drucker Offline ist
Private Const JOB_STATUS_PAPEROUT = &H40 ' Der Ausdruck kann nicht fortgesetzt werden 
' weil kein Papier mehr verfügbar ist
Private Const JOB_STATUS_PAUSED = &H1 ' Der Druckauftrag wurde angehalten
Private Const JOB_STATUS_PRINTED = &H80 ' Der Druckauftrag wurde gedruckt
Private Const JOB_STATUS_PRINTING = &H10 ' Der Druckauftrag wird gedruckt
Private Const JOB_STATUS_SPOOLING = &H8 ' Der Druckauftrag wartet in der '"Warteschleife" 
Private Const JOB_STATUS_USER_INTERVENTION = &H400 ' Der Druckauftrag kann nicht bearbeitet werden,   
' weil auf Grund eines Fehlers eine Benutzereingabe 
' erforderlich ist
' JOB_INFO_2 Priority-Konstanten
Private Const DEF_PRIORITY = 1 ' Standard Priorität
Private Const MIN_PRIORITY = 1 ' Minimale Priorität
Private Const MAX_PRIORITY = 99 ' Maximale Priorität
' Kopiert einen String anhand eines Pointers in eine String-Variable
Private Function CopyStrVar(ByRef StrDest As String, ByRef VarSrc As Long)
   StrDest = Space(lstrlen(VarSrc))
   MoveMemory ByVal StrDest, ByVal VarSrc, Len(StrDest)
End Function
' Aktuelle Durcker-Jobs ermitteln
Private Sub Command1_Click()
  Dim Retval As Long, hPrinter As Long, i As Integer
  Dim Data() As Long, DataLength As Long, JobCount As Long
  Dim Jobs() As JOB_INFO_2
 
  ' Drucker öffnen
  Retval = OpenPrinter(Printer.DeviceName, hPrinter, ByVal 0&)
 
  ' Benötigte Puffergröße ermitteln
  Retval = EnumJobs(hPrinter, 0&, 256&, 2&, ByVal 0&, 0&, DataLength, JobCount) 
  If DataLength = 0 And Retval << 0 Then
    MsgBox "Keine Druckeraufträge vorhanden."
    Call ClosePrinter(hPrinter)
    Exit Sub
  End If
 
  ' Daten über die Druckeraufträge ermitteln
  ReDim Data(DataLength - 1)
  Retval = EnumJobs(hPrinter, 0&, 256&, 2&, Data(0), DataLength,  _
  DataLength, JobCount)
 
  ' Daten manuell (für jede Variable) in die Struktur kopieren
  ReDim Jobs(JobCount - 1)
  For i = 0 To JobCount - 1
    With Jobs(i)
      .JobId = Data(i * 26)
      CopyStrVar .pPrinterName, Data(i * 26 + 1)
      CopyStrVar .pMachineName, Data(i * 26 + 2)
      CopyStrVar .pUserName, Data(i * 26 + 3)
      CopyStrVar .pDocument, Data(i * 26 + 4)
      CopyStrVar .pNotifyName, Data(i * 26 + 5)
      CopyStrVar .pDatatype, Data(i * 3 + 6)
      CopyStrVar .pPrintProcessor, Data(i * 26 + 7)
      CopyStrVar .pParameters, Data(i * 26 + 8)
      CopyStrVar .pDriverName, Data(i * 26 + 9)
      MoveMemory .pDevMode, ByVal Data(i * 26 + 10), Len(.pDevMode)
      CopyStrVar .pStatus, Data(i * 26 + 11)
      .pSecurityDescriptor = Data(i * 26 + 12)
      .Status = Data(i * 26 + 13)
      .Priority = Data(i * 26 + 14)
      .Position = Data(i * 26 + 15)
      .StartTime = Data(i * 26 + 16)
      .UntilTime = Data(i * 26 + 17)
      .TotalPages = Data(i * 26 + 18)
      .Size = Data(i * 26 + 19)
      MoveMemory .Submitted, Data(i * 26 + 20), Len(.Submitted)
      .Time = Data(i * 26 + 24)
      .PagesPrinted = Data(i * 26 + 25)
    End With
  Next i
 
  ' Ermittelte Daten ausgeben
  Debug.Print "Druckaufträge für " & Printer.DeviceName
  Debug.Print "- - - - - - - - - - - - - - - - - " & vbCrLf
  For i = 0 To UBound(Jobs)
    With Jobs(i)
      Debug.Print "Job-ID: " & .JobId
      Debug.Print "Datei: " & .pDocument
      Debug.Print "Anzahl Seiten: " & .TotalPages
      Debug.Print "Gedruckte Seiten: " & .PagesPrinted
      With .Submitted
        Debug.Print "Gesendet: " & .wDay & "." & .wMonth & "."  _
        & .wYear & _
        " " & .wHour & ":" & .wMinute & ":" & .wSecond
      End With
 
      If CBool(.Status And JOB_STATUS_PRINTING) Then
        Debug.Print "Status: Wird gedruckt"
      End If
 
      If CBool(.Status And JOB_STATUS_SPOOLING) Or .Status = 0 Then
        Debug.Print "Status: Wartet"
      End If
 
      If CBool(.Status And JOB_STATUS_PAUSED) Then
        Debug.Print "Status: Angehalten"
      End If
 
      If CBool(.Status And JOB_STATUS_PAPEROUT) Then
        Debug.Print "Status: Papier ist leer"
      End If
 
      ' ect...
      Debug.Print vbCrLf
 
    End With
  Next i
 
  ' Drucker schließen
  Retval = ClosePrinter(hPrinter)
End Sub

Diese Seite wurde bereits 8.539 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel