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: Parameter:
Rückgabewert: 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.551 mal aufgerufen. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Buchempfehlung Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||||||||||||
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. |