Druckerwarteschlange leeren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Druckerwarteschlange leeren

    Auf der Suche, die Warteschlange eines Druckers zu leeren bin ich auf folgenden Code gestoßen:

    VB.NET-Quellcode

    1. imports system.printing
    2. public sub WarteschlangeLeeren()
    3. Using ps As New LocalPrintserver()
    4. For i As Integer = 0 To 256
    5. If Not String.IsNullOrEmpty(DruckerHardware(i).Druckername) Then
    6. Using jobs As PrintJobInfoCollection = ps.GetPrintQueue(DruckerHardware(i).Druckername).GetPrintJobInfoCollection()
    7. If jobs.Count() > 0 Then MessageBox.Show(String.Format("Es befinden sich ungedruckte Aufträge im Spooler von {0}.", DruckerHardware(i).Druckername), "Spooler-Alarm", MessageBoxButtons.OK, MessageBoxIcon.Information)
    8. End Using
    9. End If
    10. Next
    11. End Using
    12. end sub


    "SystemPrinting" mußte ich durch "System.Drawing.Printing" ersetzen, da die erste Variante nicht akzeptiert wurde.
    In der Zeile

    VB.NET-Quellcode

    1. Using ps As New LocalPrintserver()

    bekomme ich folgende Fehlermeldung:
    "Der Typ "LocalPrintserver" ist nicht definiert."

    Hat jemand eine Idee, woran das liegt oder evtl. einen besseren Weg?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @dive26 freut sich bestimmt über die Erwähnung/Verwendung seines Codes.
    LocalPrintServer ist im System.Printing-Namespace der von ihm angegebenen Datei System.Printing.dll.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn Du ein Projekt mit .NET Framework 4.8 Unterbau hast, ist die Datei bei den dem Reiter Assemblys zu finden. Welchen Projekttyp hast Du? Das neuere .NET? Oder eine (zu) alte .NET Framework-Version?
    Da Du angibst, dass es .NET Framework 4.5-4.8 ist, kann ich das Nichtauffinden der Datei nicht nachvollziehen. Sie ist Teil des .NET Frameworks, muss also installiert und gelistet sein.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das ist aber nicht die Frage gewesen :rolleyes:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ups, im Titel steht Druckwarteschlange leeren. Geht ja wohl doch nur um den Verweis. @tron25 Kann man denn so die Warteschlange löschen?

    PS. Ja kann man.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    @VaporiZed
    ​@dive26 freut sich bestimmt über die Erwähnung/Verwendung seines Codes.


    Das ist kein Problem. Alles was ich hier einstelle darf gerne verwendet werden.

    @DTF
    Ja genau. Mein Code ist nur zur Feststellung gedacht, ob im Spooler Aufträge vorhanden sind. Aber tiefer geht der Code nicht.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hallo Haudruferzappeltnoch,

    kannst du mir bitte schreiben, was auf der PNG steht. Ich bin blind und kann daher nicht sehen, was abgebildet ist.

    Leider habe ich trotz Framework 4.7.2 das Problem, das ich "System.Printing" nicht einbinden kann. Auch, wenn ich im Code den Pfad angebe, bekomme ich keine Eigenschaften angezeigt.
    Weist du denn wie man einen Verweis hinzufügt? Auf dem Bild ist das Fenster zu sehen, wo man das machen kann. Wenn du das nicht weist, siehe hier:
    learn.microsoft.com/de-de/visu…ence-manager?view=vs-2022



    PS: @tron25
    Mach mal einen klick mit rechts auf das Bild, dann öffne das in einem neuen Tab. Dann nutze die Zoomfunktion des Webbrowsers. Beim Firefox z.B. STRG halten und mit dem Mausrad scrollen. Oder STRG halten und + und - drücken.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Also blind blind? Da hilft dann wohl auch keine Zoomfunktion.

    Das war eine bildhafte Anleitung zum Einbinden eines Verweises. Im Solutionexplorer bei Verweise Rechtsklick -> Verweis hinzufügen, dann öffnet sich ein Fenster mit Reitern links. Dort Reiter Assemblys wählen.
    in der Liste System.Printing suchen und anhaken dann mit ok bestätigen
    Danke. Ich habe jetzt den Verweis hinzugefügt. Ich werde die Tage den Code an mein Programm anpassen und euch danach, hoffentlich, wenn es funktioniert, zeigen. Allerdings werde ich, zum Leid einiger von euch, auch deutsche Begriffe verwenden ;-). Außerdem benutze ich ungern Abkürzungen.
    Das mit den deutschen Begriffen: Es ist Dein Code.
    Das mit den Abkürzungen (im Code vermutlich): Ich kenn eh die Regel: Nur offizielle oder betriebsinterne, bekannte Abkürzungen verwenden. Ansonsten verheddert sich über kurz oder lang das Gehirn immer wieder und man bremst sich selbst beim Codelesen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    So, es funktioniert. Allerdings würde ich gerne die Warteschlange leeren können, weiß aber nicht, wie. Hier der bisherige Code:

    VB.NET-Quellcode

    1. Using ps As New LocalPrintServer()
    2. Dim myPrintQueues As New PrintQueueCollection
    3. Dim PrQu As PrintQueue = ps.GetPrintQueue(Brailledrucker)
    4. If Not String.IsNullOrEmpty(Brailledrucker) Then
    5. Using Druckauftraege As PrintJobInfoCollection = ps.GetPrintQueue(Brailledrucker).GetPrintJobInfoCollection
    6. If Druckauftraege.Count() > 0 Then
    7. FrageFormular.Text = My.Resources.Frage
    8. FrageFormular.FrageLabel.Text = String.Format(My.Resources.Druckauftraege_vorhanden_loeschen, Brailledrucker)
    9. FrageFormular.ShowDialog()
    10. If FrageFormular.Text = "ja" Then
    11. '...
    12. End If
    13. FrageFormular.Close()
    14. End If
    15. End Using
    16. End If
    17. End Using
    18. Brailleprinter.SendToPrinter(Brailledrucker, Inhalt, Brailledrucker)

    Wenn im FrageFormular auf "Ja" oder "Nein" geklickt wird, wird die entsprechende Wahl in den Titel geschrieben und das Formular unsichtbar gemacht.
    Kann ich bei diesem Code auch die Druckaufträge löschen oder sollte ich mit dieser Meldung einfach nur die Info anzeigen und den Benutzer selbst die Aufträge löschen lassen?

    DTF schrieb:

    dive26 schrieb:

    Aber tiefer geht der Code nicht.


    Ist ja schon zu sehen wie man an die PrintSystemJobInfos kommt, ein Blick in die Doku sollte tron25 dann verraten, das PrintSystemJobInfo eine Methode namens Cancel hat.



    Du nutzt doch schon PrintJobInfoCollection, gehst sogar alle durch die du mit GetPrintJobInfoCollection() bekommst.


    Im Code von dive26 siehst du doch schon wie du die jobs bekommst, auch kannst du sehen wie er alle durchgeht. Der Rest ist in meinem Vollzitat zu sehen.

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DTF“ ()

    An welcher Stelle ist denn das Problem? Hast du Cancel ausprobiert?
    PrintServer hat außerdem die Methode DeletePrintQueue. Damit kann man fast alle Sachen überspringen die du machst. Man braucht nichmal aufräumen weil keine Instanzen benötigt werden.
    Außerdem kannst du vielleicht bei deinem Dialog mit den DialogResults arbeiten, dieser Ja/Nein Textvergleich sieht komisch aus. Ein Dialog schließt auch normalerweise automatisch mit dem Erhalt des DialogResults.

    VB.NET-Quellcode

    1. If FrageFormular.ShowDialog = Dialogresult.OK Then LocalPrintServer.DeletePrintQueue(Brailledrucker)
    Habs aber nicht getestet.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()