none
¿Como detectar que hay alguna impresora conectada? RRS feed

  • Pregunta

  • Necesito saber de que forma puedo saber si hay una impresora conectada, antes de ejecutar el metodo Print(), y saltearlo si no se detecta nada, ya que si no lo hago, no genera error, pero si va acumulando una cola de impresion que seria un desastre si al final del dia conectan una impresora/ticketera (tengo impresiones automaticas).

    tomasgavagnin


    • Editado Orion1998 miércoles, 27 de noviembre de 2019 10:53
    miércoles, 27 de noviembre de 2019 10:53

Respuestas

  • Si no quieres recurrir a WMI para leer el status de impresora, puedes hacerlo indirectamente desde .NET usando la clase PrintServer (en System.Printing).

    Mas o menos los pasos son los que te pongo a continuacion, pero no tengo a mano un ejemplo completo que funcione, asi que tendras que ir consultando la documentacion de cada uno de estos objetos para ver la manera exacta en la que hay que llamarlos.

    1. Construir una instancia del printserver, tal como var printServer = new PrintServer();
    2. Listar todas las colas de impresion: var printQueues = this.printServer.GetPrintQueues(...);
    3. Recorrerlas con un foreach, y por cada una de las colas consultar su propiedad QueueStatus.
    4. Esta propiedad tiene varios valores tales como Offline, NotAvailable, Paused, etc. Seg'un el valor que te devuelva puedes saber si la impresora esta disponible.

    https://docs.microsoft.com/en-us/dotnet/api/system.printing.printqueuestatus?view=netframework-4.8

    • Marcado como respuesta Orion1998 miércoles, 27 de noviembre de 2019 14:28
    miércoles, 27 de noviembre de 2019 12:59

Todas las respuestas

  • Si no quieres recurrir a WMI para leer el status de impresora, puedes hacerlo indirectamente desde .NET usando la clase PrintServer (en System.Printing).

    Mas o menos los pasos son los que te pongo a continuacion, pero no tengo a mano un ejemplo completo que funcione, asi que tendras que ir consultando la documentacion de cada uno de estos objetos para ver la manera exacta en la que hay que llamarlos.

    1. Construir una instancia del printserver, tal como var printServer = new PrintServer();
    2. Listar todas las colas de impresion: var printQueues = this.printServer.GetPrintQueues(...);
    3. Recorrerlas con un foreach, y por cada una de las colas consultar su propiedad QueueStatus.
    4. Esta propiedad tiene varios valores tales como Offline, NotAvailable, Paused, etc. Seg'un el valor que te devuelva puedes saber si la impresora esta disponible.

    https://docs.microsoft.com/en-us/dotnet/api/system.printing.printqueuestatus?view=netframework-4.8

    • Marcado como respuesta Orion1998 miércoles, 27 de noviembre de 2019 14:28
    miércoles, 27 de noviembre de 2019 12:59
  • Lo estoy por investigar y probar pero calculo que la propiedad seria esta: 

    Waiting 8192

    The printer is waiting for a print job.

    Si esta en ese estado, significa que esta disponible y no hay errores, seguramente lo tenga que juntar con el que indica que tiene cola de impresion


    tomasgavagnin

    miércoles, 27 de noviembre de 2019 14:31