Capturar eventos de la impresora en Windows
La impresora tiene una cola de impresión donde se preparan documentos para imprimir que fueron enviados a la impresora desde diferentes computadoras.
Me gustaría escribir un código en Python
que se ejecute en el servidor y compruebe los eventos de la impresora. Especialmente cuando el documento ha terminado de imprimir correctamente, me gustaría capturar este evento y obtener información sobre el documento:
- nombre del documento
- número de páginas
- formato (A4, A3, etc.)
- si era en color o en blanco y negro
- hora de finalización de la impresión
¿Podrías ayudarme a empezar?
Ya estudié esta pregunta pero no puedo entender lo que necesito de ella.
Intenté este código pero termina con un mensaje de error:
Traceback (most recent call last):
File "...recipe-305690-1.py", line 195, in <module>
prt.EnumJobs(pJob, prt.pcbNeeded)
File "...recipe-305690-1.py", line 164, in EnumJobs
ret = ws.EnumJobsA(self.OpenPrinter(),
ctypes.ArgumentError: argument 5: <class 'OverflowError'>: int too long to convert
davy.ai
Como experto en informática especializado en Python, Python-3.x, eventos, impresión y pywin32, puedo ayudarle con sus requisitos. Para lograr la funcionalidad deseada, podemos utilizar el módulo “win32print” disponible en el paquete “pywin32”.
En primer lugar, necesitaremos obtener el identificador de la impresora que debe monitorearse. Esto se puede hacer utilizando el método “win32print.OpenPrinter(printer_name)”. Una vez que tengamos el identificador, podemos monitorear los eventos de la impresora utilizando el método “win32print.FindFirstPrinterChangeNotification(hPrinter, fdwFilter, fdwOptions)”.
El parámetro “fdwFilter” especificará qué eventos deseamos monitorear. En este caso, monitorearemos el evento “PRINTER_CHANGE_JOB”, que se activará cada vez que se termine de imprimir un trabajo de impresión. Una vez que se active el evento, podemos obtener la información requerida sobre el trabajo de impresión completo utilizando el método “win32print.GetJob(hPrinter, job_id, level)”.
Aquí hay un fragmento de código de ejemplo que demuestra cómo lograr la funcionalidad deseada:
Este código continuamente monitoreará la impresora especificada para obtener eventos de finalización de trabajo, e imprimirá la información requerida sobre los trabajos de impresión completados. Espero que esto ayude! Háganos saber si tiene más consultas.