2010-06-18 5 views
12

erstellen Wie würde ich meine eigenen XP-Druckertreiber erstellen, den folgenden tun:Wie eigene XP-Druckertreiber

  • Druck in Datei (wahrscheinlich XPS Format)
  • setzte diese Datei in ein Passwort geschützte ZIP-Datei
  • E-Mail der Zip-Datei auf eine konfigurierten E-Mail-Adresse

Antwort

17

Was Sie brauchen, ist kein Druckertreiber. Einer nannte es Print Monitor. Es ist eine DLL, die in Spooler.exe Prozess geladen wird. Die DLL gibt dem Spooler in der Initialisierungsphase logische Namen von Ports wie LPT1 :, FILE :, SPSPort: usw. Das mit einem Druckertreiber erstellte Optput muss auf beliebige Weise an ein Zielgerät gesendet werden. Diese Arbeit druckt Monitore wie "Standard TCP/IP Port" oder "Local Port".

Um den Druckermonitor zu schreiben, müssen Sie Windows Driver Kit herunterladen und installieren (WDK oder vor einiger Zeit DDK siehe http://www.microsoft.com/whdc/devtools/WDK/default.mspx). Weitere Informationen zum Schreiben des Druckermonitors finden Sie unter http://msdn.microsoft.com/en-us/library/ff563806(v=VS.85).aspx. Print Monitor ist eine DLL mit einer exportierten Funktion (siehe http://msdn.microsoft.com/en-us/library/ff549405(v=VS.85).aspx). Ich empfehle Ihnen, mit der Änderung von LocalMon am lokalen Monitor zu beginnen, die Sie nach der Installation von WDK finden (siehe http://msdn.microsoft.com/en-us/library/ff556478(v=VS.85).aspx).

Das praktischste Problem beim Schreiben des Druckermonitors ist die Anforderung, eine echte Multithread-DLL zu schreiben. Sie müssen sehr vorsichtig sein, verstehen und EnterCriticalSection in allen Funktionen verwenden. Zum Debuggen des Druckermonitors sollten Sie Visual Studio Debugger mit dem Prozessspooler verbinden. Der Rest ist das gleiche wie das Schreiben einer Standard Windows Win32/Win64 DLL.

AKTUALISIERT: Noch eine kleine Bemerkung. Wenn Sie nicht möchten, dass der Druckertreiber irgendetwas mit den an den Drucker gesendeten Daten macht, können Sie den generischen Druckertreiber verwenden. Sie finden es unter "Generic", Drucker mit dem Namen "Generic/Text Only".Untersuchen Sie einige Treibereinstellungen, die Sie (wie CR LF-Einstellungen) hat

+0

Das ist die richtige Antwort, ich habe solche Dinge getan. Aber Sie ** möchten nicht mehr als notwendig innerhalb des Spooler-Prozesses tun: Nachdem Sie die Daten greifen, starten Sie einen neuen Prozess, der das Zippen und E-Mail-Versand durchführt. – egrunin

+0

@egrunin: Guter Vorschlag, um komplexere Arbeit in einem separaten Prozess zu machen! Ich habe auch vor vielen Jahren einen Print Monitor geschrieben und ich kann sagen, dass das komplexeste Problem das Debuggen in einer Multithread-Multiuser-Umgebung ist. Das Starten der separaten Prozesse kann das Debuggen erleichtern. – Oleg

+0

Alle Links in diesem Artikel sind tot. Irgendein mögliches Update? – Attaque

3

Während ich keine spezifische Beratung bieten kann, wenn ich will wh tun bei dir beschreiben, das erste, was ich tun würde, ist durch die Quelle für PDFCreator lesen - es ist ein Windows-Druckertreiber, der PDFs ausspucken kann.

+0

der Link für den Quellcode auf dieser Website funktioniert nicht. – CJ7

+0

Oh, seltsam = \ Vielleicht hier: http://sourceforge.net/projects/pdfcreator? –

+4

PDFCreator verwendet intern RedMon (http://pages.cs.wisc.edu/~ghost/redmon/), um Druckdaten zu erfassen. Gehen Sie direkt zu RedMon, es ist auch ein OpenSource-Projekt, das als Port Monitor arbeitet. – Jason