WM_SPOOLERSTATUS abfragen



  • Hallo.

    Ich möchte gern die Windowsmessage WM_SPOOLERSTATUS, also ob ein Druckauftrag gestartet wurde, abfragen.

    Hier ein paar Verständnisfragen meinerseits, da ich bisher noch keine Lösung bei MSDN und Google gefunden habe.

    Kann ich unterscheiden, ob die Message geschickt wird wegen Druckauftragstart oder -cancel? So wie ich es rausgelesen habe, wird die Message ja bei beiden Events geschickt.

    Würde es funktionieren, dass das Programm versteckt im Hintergrund läuft ohne groß Ressourcen zu beanspruchen und quasi sobald diese Message kommt, eine Funktion ausführt?

    Sorry wegen der Fragen, aber habe mich bisher nur mit UNIX Systemnaher Programmierung befasst und noch nicht mit der WIN API.

    Falls jemand nen gutes Tutorial kennt, wäre ich dafür auch dankbar.

    So, jetzt freue ich mich auf die Antworten und werde anfangen meinen Quellcode zu schreiben. Mal schauen wie weit ich komme.

    Vielen Dank.



  • Hi

    also ich lese momentan dieses tutorial:

    www.win-api.de

    auf deine anderen Fragen kann ich dir leider keine Antwort geben, kenne auch nur den MSDN Eintrag und da stehts halt nicht drin :S

    Gruß & Viel Erfolg

    Panamajay



  • Danke für das Tutorial. Ja leider steht in der MSDN-Hilfe nicht wirklich was brauchbares 😞 Na vielleicht hat ja noch jemand ein paar Infos für mich.



  • Hallo nochmal,

    bin eben durch Zufall über folgendes gestolpert:

    "du könntest auch die Message WM_SPOOLERSTATUS abfangen, die immer bei Aktivität des Spoolers versendet wird. im LoWord des LParam steht die Anzahl der noch verbleibenden Druckaufträge. "

    Ist jetzt wahrscheinlich alles andere als hübsch, was ich dir vorschlag:

    vergleich die jetzige Anzahl mit der vorherigen Anzahl ==> wenn die größer ist kam ein neuer auftrag, wenn geringer wurde einer abgearbeitet.

    Gibt aber bestimmt schönere Lösungen, warte einfach mal auf die Antworten von den Leuten, die mehr Ahnung haben wie ich, ab 🙂

    Gruß
    Panamajay



  • Hallo, bbskater,

    leider wirst du ohne diese Windows-Nachricht auskommen müssen, weil sie nicht dazu bestimmt ist. MSDN sagt dazu:

    Applications should not assume that they will receive a WM_SPOOLERSTATUS message for every change in spooler status.

    Was aber noch viel wichtiger ist, dass dieser Typ der Nachricht ab WinXP nicht mehr unterstützt wird. Bitte immer Remarks zu jedem MSDN-Dokumentationsbeitrag lesen.

    Stattdessen könntest du versuchen, das über die FindFirstPrinterChangeNotification() -Funktion (sowie FindNextPrinterChangeNotification() ) umzusetzen. Diese Funktionen bieten dir - meiner Meinung nach - das, was du brauchst:

    The FindFirstPrinterChangeNotification function creates a change notification object and returns a handle to the object. You can then use this handle in a call to one of the wait functions to monitor changes to the printer or print server.
    The FindFirstPrinterChangeNotification call specifies the type of changes to be monitored. You can specify a set of conditions to monitor for changes, a set of printer information fields to monitor, or both.

    Im Internet müssttest auch Codebeispiele zu den Funktionen finden.
    Damit würdest hast sowohl die Änderung des Status erfasst als auch den von dir gewünschten "wartenden" Prozess. Wie du deine Anwendung im Hintergrund laufen lässt, ist eine relativ häufig gestellte Frage. Einfach mal googeln 🙂
    Lass uns wissen, falls du nicht weiterkommst.

    Grüße,
    Rewind.



  • Vielen Dank für die Antwort, ja damit ist mir schon mal weitergeholfen. Ich werde dann mal meinen Quellcode zusammenbasteln, sobald ich das fertig hab und ausprobiert habe, melde ich wieder.


Anmelden zum Antworten