Ir al contenido


Foto

Saber si la impresora esta encendida, en pausa etc.


  • Por favor identifícate para responder
20 respuestas en este tema

#21 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 junio 2021 - 01:05

Hola Escafandra...
 
Con respecto a este post : http://delphiaccess....google_vignette
 
Tu escribiste una funcion muy interesante para saber el status de la impresora, probe tu funcion usando el Delphi Tokyo 10.2 en Windows 10 y la funcion siempre me devuelve falso.
 
Por que sera que no funciona???
 
Me gustaria que por favor la revisaras nuevamente ya que el post se publico hace unos años. Es una funcion muy util!!!
 
Gracias por tu ayuda y atencion...


 

Buenas tardes, saludos desde San Jose, de Costa Rica.
 
Este hilo es un poco antiguo; pero contiente lo que Yo necesito, les resumo
 
Tengo una aplicación en delphi 2007 que controla la impresión de las ordenes de poduccion de la empresa, todas la impresoras son en red y tienen definido un IP especifico, Yo tengo una rutina que detecta si la IP esta activa, si esta activa envio la impresión sino me espero hasta que este activa, esta rutina funciona muy bien en windows server 2003; pero necesito migrar a windows 10 y algo sucede pero no me funciona este apagada o encendida, siempre me envia el status de que la IP esta inactiva.
 
Buscando otras alternativas esta rutina tiene lo que Yo necesito, enviar el nombre de la impresora y me responda si esta activa asi de simple; PERO me sucede lo mismo...
 
ejecuto un trace de la rutina


  •   Result:= false;

  •   if OpenPrinter(PCHAR(NamePrinter), hPrinter, 0) then (ejecuta bien esta linea)

  •     if GetPrinter(hPrinter, 6, PBYTE(@dwStatus), sizeof(DWORD), @Needed) then (al tratar de ejecutar esta, como que no se cumple la condicion y se va  al end, entonces siempre es falso)

  •       Result:= not boolean(dwStatus);

  • end;
Será que hay que cambiar algún parametro para que funcione en windows 10?
 
Agradecería much si me puediesen orientar, nuevamente muy agradecido por su ayuda.

 


Tras una petición privada he revisado este hilo y he visto que ya se había presentado la misma cuestión en Win10.
Parece que el buffer que requiere la API GetPrinter en Win10 es de mayor tamaño del definido por la estructura que se ha de utilizar. M$ utiliza muy a menudo una forma de conocer el tamaño del buffer necesario que utiliza en esta API y es así como vamos a conocer el tamaño de buffer que necesita Win10. La función la podemos escribir de esta forma


php
  1. function IsPrinterAvailable(PrinterName: String): boolean;
  2. var
  3. dwStatus: PDWORD;
  4. Needed: DWORD;
  5. hPrinter: THANDLE;
  6. begin
  7. Result:= false;
  8. if OpenPrinter(PCHAR(PrinterName), hPrinter, 0) then
  9. begin
  10. GetPrinter(hPrinter, 6, nil, 0, @Needed); // Preguntamos por el tamaño de buffer necesario
  11. GetMem(dwStatus, Needed); // Reservamos memoria
  12. if GetPrinter(hPrinter, 6, dwStatus, Needed, @Needed) then
  13. Result:= dwStatus^ <> PRINTER_STATUS_NOT_AVAILABLE;
  14. FreeMem(dwStatus); // Liberamos el buffer
  15. end;

Saludos.


  • 1




IP.Board spam blocked by CleanTalk.