![]() |
Wie programmiere ich einen Drucker
Hallo,
ich habe eine Frage (wer hätte das gedacht?) und zwar folgendes. Ist es möglich einen Drucker zu programmieren. Es geht darum an einer Schule mit einem Programm (installiertes Druckertool) jeden Schüler für das drucken zur Kasse zu bitten (um Kosten für Papier etc. zu sichern). Dafür sollen die Schüler vorher Geld auf ein Konto einzahlen. Möchte ein Schüler nun etwas ausdrucken wählt er im Druckerdialog von Word/Firefox oder was auch immer das Druckertool aus und dann wird das Geld abgebucht (evtl noch Eingabe von Zugangsdaten für das Schülerkonto). Ich kenne es von Programmen wie pdfCreator, dass die sich als Drucker installieren lassen. Wie macht man ein solches Programm, dass die Druckaufträge abfängt? mfg KahPee |
AW: Wie programmiere ich einen Drucker
Hallo,
google mal nach dem Stichwort "virtueller Drucker". Lg, jus |
AW: Wie programmiere ich einen Drucker
Obwohl ich mir denke, dass der Ansatz so nicht funktionieren wird.
Auf dem Rechner müssen die normalen Drucker auch installiert sein, sonst kann ich über die ja nicht den realen Ausdruck starten, bzw. Anpassungen über den Druckertreiber vornehmen (Hoch-/Querformat, Farbe, Qualität). Einen virtuellen Drucker wie pdfCreator ist wie ein normaler Drucker in der Liste und kann bei Bedarf ausgewählt werden. Alle anderen Drucker aber auch. Man kann also insofern nicht sicherstellen, dass alle auch nur über diesen virtuellen Drucker den Ausdruck vornehmen. Somit müsste man also etwas (einen Hook?) programmieren, was sich zwischen die Druckausgabe klemmt und dann entsprechend die Seiten mitzählt und das Benutzerkonto belastet. |
AW: Wie programmiere ich einen Drucker
PDFCreator ist ja auch Open-Source, da müsste sich doch einiges abschauen lassen. Die andere Sache ist natürlich die: Wenn du deinen eigenen Druckertreiber irgendwann gebaut hast, was hindert Menschen dann dadran, in dem Druck-Dialog einfach den echten auszuwählen, der kein Geld vom Konto abbucht? Und dann muss natürlich alles, was dem virtuellen gesagt wird, an den echten durchgereicht werden, und da gibt es wohl je nach Druckertyp sehr viele Parameter zum drucken (Im Druckdialog gibt es ja diesen schönen "Eigenschaften"-Knopf neben der Druckerauswahl, da kann man ja so manches einstellen...). Gibt es für Drucker vielleicht Filter-Treiber wie für andere Geräte?
Vielleicht könnte man auch einfach einen Hook schreiben, der den/die Funktionen zum Drucken abfängt und erst an Windows weiterleitet, wenn gezahlt wurde? So würde ich das jedenfalls erstmal probieren... Doofer Kasten... Sir Rufo dachte wohl in die selbe Richtung, meine Zwänge verlangen aber, dass ich poste... HTH |
AW: Wie programmiere ich einen Drucker
Nö, aber es gibt einen Notifier für Druckjobs
Da war schon jemand aktiv und hat da was umgesetzt (sogar in Delphi), was zu 90% diesen Fall abdeckt ![]() Könnte passen |
AW: Wie programmiere ich einen Drucker
HEy,
danke schon mal für die ersten Antworten - virtueller Drucker - das war das Wort wonach ich beim schreiben gesucht habe... Meine erste Intention war auch einen Hook zu schreiben. Nur habe ich absolut gar keine Ahnung wie man den Befehl abfängt. Das mit dem Aussuchen eines anderen druckers wäre nicht das problem gewesen, da die nutzer keine Adminrechte haben und so keine drucker installieren können. Der einzige installierte Drucker wäre dann ebenjener der zur Kasse bittet... :P Aber nichtsdestotrotz klingt würde ich gerne mal die Variante das per Hook zu machen verfolgen. Wie müsste man dann die Sache angehen? mfg KahPee Edit: Achso falls es eine Rolle spielt. Der Einfachheit halber handelt es sich um einen Netzwerkdrucker ^^ |
AW: Wie programmiere ich einen Drucker
Hier an der Uni läuft das über einen Druckserver, der die Seiten alle einzelne verarbeitet und dann an den Netzwerkdrucker weitergibt. So ist eine seitengenaue Abrechnung möglich.
Würde mich nicht Wundern wenn es unter Linux bereits entsprechende (oder leicht anzupassende) Software geben würde. mfG Markus |
AW: Wie programmiere ich einen Drucker
Ich persönlich würde mir vielleicht erstmal die anderen Möglichkeiten angucken, aber wenn du wirklich hooken willst, gibt es dafür sehr viele Beispiele.... von der Druck-API habe ich absolut gar keine Ahnung, aber als Funktion mit der man es mal probieren könnte hört sich z.B.
![]() |
AW: Wie programmiere ich einen Drucker
Zitat:
MfG Fabian |
AW: Wie programmiere ich einen Drucker
So wie ich das gesehen habe gibt es keinen Hook für das Drucken.
Es gibt ein Notify-Event Wenn die anderen Drucker-Treiber auf dem System nicht installiert sind ... Wie willst du dann darauf drucken? Der Link den ich hier gepostet habe führt zu Delphi-Sourcen, wo genau diese Abrechnung der Druckkosten umgesetzt wurde. aber vielleicht ist das zu einfach :mrgreen: |
AW: Wie programmiere ich einen Drucker
Naja, im MSDN steht, dass man immer StartDoc aufrufen sollte, wenn man druckt, und dort steht auch, dass man sein Programm so auslegen soll, dass diese Funktion lange braucht (z.B. wenn Netzwerkdrucker nicht reagiert o.Ä.) - und wenn das in den Programmen dann in einem seperaten Thread gemacht wird (klar, steht alles nicht fest), und man diese Funktion hookt, dann könnte es doch vielleicht hinhauen?
Kommt halt drauf an, ob der OP gerne friemeln will weil er Lust und Zeit dazu hat, oder ob er einfach nur irgendeine fertige Lösung haben will :-D |
AW: Wie programmiere ich einen Drucker
hier mal 2 komplett andere Denkansätze:
1. Ist eine Windows Domain vorhanden? Dann ginge es allenfalls über eine Script oder Programm mit den Policies 2. Kauf bzw installiere einen Drucker der einen Treiber zur Verfügung stelt, der dies von Haus aus kann (zb Canon bietet solche Drucker an) |
AW: Wie programmiere ich einen Drucker
Zitat:
Zitat:
Zusätzlich würde ich einfach unter der Annahme, dass der Drucker im Netzwerk hängt und eine weitere Bastellösung hinzufügen: Du hast 2 Druckertreiber installiert. Einen virtuellen Drucker von dir und den echten Druckertreiber von dem Drucker, dieser aber von den Anschlüssen absichtlich so konfiguriert wird, dass man über den nicht erfolgreich ausdrucken kann. Wenn einer über deinen den virtuellen Drucker druckt, dann schickst einfach den Druckjob weiter an den echten Druckertreiber und läßt diesen in echte Druckersteuerbefehle übersetzen, sprich rastern. Aber die Druckausgabe wird absichtlich in eine RAW-Rasterdatei umgeleitet. Diese RAW-Datei schickst du dann selber z.B. per Indy-LPR-Protokoll übers Netzwerk direkt zum Drucker. Lg, jus |
AW: Wie programmiere ich einen Drucker
Morgen
Kann man nicht versuchen den Drucker nicht versuchen den Drucker bis zur Bezahlung offline zusetzen? ![]() Vor der Freigabe sollte der Spooler aufgeräumt werden, es kann ja sein, das einer keine Lust hatte zu bezahlen. Dann soll es noch die printui.dll geben, mit ihr soll der Drucker gesteuert werden können. ![]() ![]() |
AW: Wie programmiere ich einen Drucker
Warum Drucker programmieren, wenn man nur die Daten abfangen muss?
Druckertreiber installieren und an einen TCP-Port hängen. Dort an dem Port lauscht ein z.B. INDY-TCP-Server. Die Daten brauchen dann nur genommen werden, um diese dann wirklich an den Drucker zu Streamen. Die Druckdaten liegen meist in PS oder PCL vor. Also den Stream einfach nach "neue Seite" parsen - fertig. |
AW: Wie programmiere ich einen Drucker
Wenn ich mich recht erinnere war die ursprüngliche Aufgabenstellung
Für jede gedruckte Seite / Blatt einen Betrag x zu verlangen. Wenn es sich um einen Netzwerkdrucker handelt, wird der wohl so intelligent sein, seinem Server mitzuteilen was für einen Zählerstand er hat. Ebenso haben Druckjobs im Netz meistens einen Namen. Also fragt man den Server was er drucken will, protokolliert den Zählerstand und gut ist. Gruß K-H |
AW: Wie programmiere ich einen Drucker
Ein ähnliches Problem wurde in diesem
![]() Leider steht nicht mit drin, ob es funktioniert hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz