2010-06-18 6 views
12

Comment pourrais-je créer mon propre pilote d'imprimante XP qui procédez comme suit:Comment créer votre propre XP pilote d'imprimante

  • impression vers un fichier (XPS probablement le format )
  • mettre ce fichier dans un mot de passe fichier ZIP protégé
  • email le fichier zip à une configuration adresse e-mail

Répondre

17

Ce dont vous avez besoin n'est pas un pilote d'imprimante. On l'a appelé Print Monitor. C'est une DLL, qui sera chargée dans le processus Spooler.exe. La DLL donne à Spooler lors de la phase d'initialisation des noms logiques de ports tels que LPT1 :, FILE :, SPSPort: etc. L'optput préparé avec un pilote d'imprimante doit être envoyé de n'importe quelle manière vers un périphérique de destination. Ce travail imprime des moniteurs tels que "Port TCP/IP standard" ou "Port local".

Pour écrire un moniteur d'imprimante, vous devez télécharger et installer le Kit de pilotes Windows (WDK ou DDK il y a quelque temps, voir http://www.microsoft.com/whdc/devtools/WDK/default.mspx). Pour plus d'informations sur l'écriture d'un moniteur d'imprimante, voir http://msdn.microsoft.com/en-us/library/ff563806(v=VS.85).aspx. Print Monitor est une DLL avec une fonction exportée (voir http://msdn.microsoft.com/en-us/library/ff549405(v=VS.85).aspx). Je vous recommande de commencer par modifier l'exemple de Local Monitor LocalMon, le sod source complet que vous trouvez après l'installation de WDK (voir http://msdn.microsoft.com/en-us/library/ff556478(v=VS.85).aspx).

Le problème le plus pratique avec l'écriture de moniteur d'imprimante est l'exigence d'écriture d'une DLL multithread réel. Vous devez être très prudent, comprendre et utiliser EnterCriticalSection dans toutes vos fonctions. Pour le débogage du moniteur de l'imprimante, vous devez connecter Visual Studio Debugger au spouleur du processus. Le reste est le même que l'écriture d'une DLL Windows Win32/Win64 standard en cours d'exécution.

MISE À JOUR: Encore une petite remarque. Si vous ne voulez pas que le pilote d'imprimante fasse quoi que ce soit avec les données envoyées à l'imprimante, vous pouvez utiliser un pilote d'imprimante générique. Vous le trouverez sous "Generic" fabrication, imprimante avec le nom "Generic/Text Only".Examinez certains paramètres du pilote qui vous a (comme les paramètres CR LF)

+0

C'est la bonne réponse, j'ai fait des choses comme ça. Mais vous ** ne voulez pas en faire plus que nécessaire dans le processus de spouleur: après avoir récupéré les données, démarrez un nouveau processus qui effectue le zipping et l'envoi par courrier électronique. – egrunin

+0

@egrunin: Bonne suggestion pour faire un travail plus complexe dans un processus séparé! J'ai aussi écrit il y a plusieurs années un Print Monitor et je peux dire que le problème le plus complexe est le débogage dans un environnement multi-thread multi-utilisateur. Le démarrage des processus séparés peut faciliter le débogage. – Oleg

+0

Tous les liens dans cet article sont morts. Toute mise à jour possible? – Attaque

3

Bien que je ne peux pas offrir des conseils précis, si je voulais faire wh à vous décrire, la première chose que je ferais est de lire la source pour PDFCreator - c'est un pilote d'impression Windows qui peut cracher des fichiers PDF.

+0

le lien pour le code source sur ce site ne fonctionne pas. – CJ7

+0

Oh, étrange = \ Peut-être ici: http://sourceforge.net/projects/pdfcreator? –

+4

PDFCreator utilise RedMon en interne (http://pages.cs.wisc.edu/~ghost/redmon/) pour capturer des données d'impression. Optez pour RedMon directement, c'est aussi un projet opensource fonctionne comme un moniteur de port. – Jason

Questions connexes