OVH Cloud OVH Cloud

Nb documents dans le spooler d'impression ?

1 réponse
Avatar
FunKiKi
Bonjour

je viens de terminer un programme affichant une liste d'alarmes au fil
de l'eau ligne après ligne sur une imprimante matricielle (Windows 2000).

J'ai décidé d'activer le spooler afin de ne pas bloquer le traitement
qui gère l'impression en cas d'erreur d'impression.

Cela a un aspect pratique : quand l'imprimante est bloquée pour une
raison ou une autre (plus de papier par exemple), le spooler conserve
toutes les lignes en attente d'impression.

Cependant, chaque ligne imprimée génère une entrée dans le spooler.

Mes questions :

- combien de fichiers (d'entrées) peut-on avoir raisonnablement dans le
spooler ?

- quelle est la taille maximale du spooler? Est-elle limité ? à la
taille du disque dur ?

- peut-on configurer le spooler en 'FIFO'. A savoir que quand un
certain nombre de lignes est en attente dans le spooler, est -il
possible que le dernier fichier rentré écrase le plus ancien dans la
liste ?
Si cela n'est pas possible, est-il possible de connaitre avec l'API
Windows le nombre d'entrées dans le buffer et de supprimer soi-même les
entrées les plus anciennes ? peut-on effacer l'intégralité du spooler
par une commande de l'API Windows ?

- en as d'erreur d'impression (imprimante arreté par exemple), un
message d'erreur apparait systématiquement avec la possibiliét de
reesayer ou d'annuler. Est-il possible de ne pas afficher ce message ?

Merci

FunKiki

1 réponse

Avatar
Aurélien REGAT-BARREL
> Mes questions :

- combien de fichiers (d'entrées) peut-on avoir raisonnablement dans
le spooler ?

- quelle est la taille maximale du spooler? Est-elle limité ? à la
taille du disque dur ?



C'est sûrement limité, mais de quelle manière, je ne sais pas.

- peut-on configurer le spooler en 'FIFO'. A savoir que quand un
certain nombre de lignes est en attente dans le spooler, est -il
possible que le dernier fichier rentré écrase le plus ancien dans la
liste ?



Tu veux dire en buffer circulaire. Je dirais que non, et que si le spooler
est plein, la fonction d'impression devient bloquante comme si l'impression
était envoyée directement à l'imprimante (c'est le comportement que
j'attendrais, car je ne sais pas ce qui se passe réellement dans ce cas). A
moins que tout simplement l'impression échoue. En tous cas ça m'étonerais
fort que le spooler écrase des documents, il est plutôt là pour assurer leur
impression.

Si cela n'est pas possible, est-il possible de connaitre avec l'API
Windows le nombre d'entrées dans le buffer et de supprimer soi-même
les entrées les plus anciennes ? peut-on effacer l'intégralité du
spooler par une commande de l'API Windows ?



C'est ce qui me parraît le plus raisonnable dans ton cas. Tu gères toi même
la liste. Tu la limite à un certain nombre, et si c'est full, tu supprime le
plus vieux job.
Voir les focntions EnumJobs/GetJob/SetJob pour gerer les impressions en
attente.
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q228769

- en as d'erreur d'impression (imprimante arreté par exemple), un
message d'erreur apparait systématiquement avec la possibiliét de
reesayer ou d'annuler. Est-il possible de ne pas afficher ce message ?



Je pense que tu peux détecter une erreur avec
FindNextPrinterChangeNotification et ses copains.
Pour la boite de dialogue, peut être qu'il est possible de modifier les
propriétés d'un job pour que l'erreur de soit pas signalée (SetJob avec
JOB_INFO_2.pNotifyName modifié)...
La doc de SetJob ne semble pas interdire cela:
The following members of a JOB_INFO_1 or JOB_INFO_2 structure are ignored on
a call to SetJob:

JobId, pPrinterName, pMachineName, pDrivername, Size, Submitted, Time, and
TotalPages.


--
Aurélien REGAT-BARREL