Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0116: Druckaufträge löschen, anhalten und fortsetzen

 von 

Beschreibung 

Mit diesem recht knappen Tip lassen sich die Druckaufträge eines namentlich bekannten Druckers aus der Warteschlange löschen, pausieren und wieder fortsetzen.

Update von Florian Rittmeier (): Der Tipp sollte nun auch auf NT-Systemen arbeiten.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

ClosePrinter, OpenPrinterA (OpenPrinter), SetPrinterA (SetPrinter)

Download:

Download des Beispielprojektes [2,52 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command3"
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"

Option Explicit

Private Declare Function SetPrinter Lib "winspool.drv" Alias _
        "SetPrinterA" (ByVal hPrinter As Long, ByVal Level _
        As Long, pPrinter As Byte, ByVal Command As Long) _
        As Long

Private Declare Function OpenPrinter Lib "winspool.drv" Alias _
        "OpenPrinterA" (ByVal pPrinterName As String, phPrinter _
        As Long, pDefault As PRINTER_DEFAULTS) As Long

Private Declare Function ClosePrinter Lib "winspool.drv" _
        (ByVal hPrinter As Long) As Long

Private Type PRINTER_DEFAULTS
     pDatatype As Long
     pDevMode As Long
     DesiredAccess As Long
End Type

Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Const PRINTER_ACCESS_ADMINISTER As Long = &H4
Const PRINTER_ACCESS_USE As Long = &H8
Const PRINTER_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or _
                            PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)


Private Const PRINTER_CONTROL_PURGE As Long = 3&
Private Const PRINTER_CONTROL_PAUSE As Long = 1&
Private Const PRINTER_CONTROL_RESUME As Long = 2&

Private Sub PrinterCommand(ByVal Command As Long)
    Dim PName As String
    Dim Result As Long, hPrinter As Long
    Dim pd As PRINTER_DEFAULTS
  
    pd.DesiredAccess = PRINTER_ALL_ACCESS
    PName = Printer.DeviceName
    
    Result = OpenPrinter(PName, hPrinter, pd)
    If Result = 0 Then
        Call MsgBox("Ein Druckerhandle konnte nicht erstellt werden." & _
            vbNewLine & "Möglicherweise verfügen Sie nicht über die " & _
            "erforderlichen Rechte zum Ausführen dieser Aktion.", _
            vbExclamation + vbOKOnly, App.Title)
        Exit Sub
    End If
    
    Result = SetPrinter(hPrinter, 0, vbNull, Command)
    If Result = 0 Then
        Call MsgBox("Die angeforderte Aktion konnte aufgrund eines " & _
             "Fehlers nicht durchgeführt werden.", _
             vbExclamation + vbOKOnly, App.Title)
    End If
    Result = ClosePrinter(hPrinter)
End Sub

Private Sub Command1_Click()
    Call PrinterCommand(PRINTER_CONTROL_PURGE)
End Sub

Private Sub Command2_Click()
    Call PrinterCommand(PRINTER_CONTROL_PAUSE)
End Sub

Private Sub Command3_Click()
    Call PrinterCommand(PRINTER_CONTROL_RESUME)
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Alexander Predl am 02.05.2005 um 18:14

Mein eigener Code brachte immer "Access denied". Dieser Tip war Goldes wert. Vielen Dank!