GARANTIR DESCONTO

Fórum Impressora on-line (como saber se a impressora está on-line #177383

25/08/2003

0

preciso descobrir se a impressora está on-line para fazer uma impressão, detalhe ela pode ser impressora local ou de rede.


Machado

Machado

Responder

Posts

28/08/2003

Allen74

Machado,

Para uma impressora local, você poderia utilizar funções da BIOS (mais precisamente a INT $17) para que fosse retornado os bits de status da impressora que poderiam indicar se a impressora está online.

Ocorre que o acesso direto ao hardware, com citado acima não é permitido em sistemas operacionais com tecnologia NT, como o Windows/NT/2000/XP. Nestes sistemas operacionais, somente o SPOOL de impressão tem permissão para acesso e conhecimento do status da impressora.

Sendo assim, principalmente para uma impressora na rede (que logicamente não propaga o status da impressora para os computadores cliente), é impossível saber se a mesma está online sem antes tentar enviar um trabalho de impressão para o Spool.

Pesquisando um pouco sobre este assunto, encontrei um site contendo diversas referências interessantes sobre o delphi, especificamente sobre Delphi e impressoras, neste link:

http://homepages.borland.com/efg2lab/Library/Delphi/Printing/

Mais especificamente sobre a detecção de impressoras online, nesta mesma página, encontrei as seguintes referências:

[b:781275d646]Checking if Printer is Online[/b:781275d646] Peter Below´s [url=http://homepages.borland.com/efg2lab/Library/UseNet/2000/0113d.txt]UseNet Post[/url] showing how to capture WMSpoolerStatus messages. Peter Below´s [url=http://homepages.borland.com/efg2lab/Library/UseNet/2001/0331c.txt]UseNet Post[/url] about checking whether printer is ´on´. Peter Below´s [url=http://homepages.borland.com/efg2lab/Library/UseNet/2001/0501b.txt]UseNet Post[/url] about EnumJobs for printer status in WinNT. Detecting Printer Status, http://www.undu.com/Articles/990228a.html Testing Printer Status: Chris´ [url=http://homepages.borland.com/efg2lab/Library/UseNet/1999/0120a.txtUseNet Post[/url] Q160129: HOWTO Get the Status of a Printer and a Print Job http://support.microsoft.com/support/kb/articles/Q160/1/29.asp


Traduzindo um trecho do segundo post de Peter Bellow (só para quem não sabe, faz parte do Team B, equipe do Delphi na Borland):

Não existe nenhum método padrão para fazer isto em um programa Win32. Tal programa deve deixar o spooler de impressão se preocupar com os erros de impressão. Então, o que você pode fazer é enviar uma solicitação de impressão através do spool (Qualquer impressão através de funções da API vai fazer isso) e então checar se foi bem sucedido fazendo chamada a EnumJobs ou GetJob (WinSpool unit, win32.hlp). Isto te permitirá saber se o trabalho de impressão está com problemas, mas até onde eu sei, não existe um meio confiável de saber qual o problema que está ocorrendo deste ponto em diante - ao menos nada que seja genérico (que funcione em qualquer plataforma e com qualquer tipo de impressora).


Neste mesmo artigo ele fornece um exemplo de código fonte que consulta os trabalhos de impressão existentes utilizando as duas chamadas à API do Win32 citadas. Com uma consulta ao help da API do Windows (win32.hlp) você pode descobrir os códigos e status retornados por estas bibliotecas.

Não sei quais são suas necessidades específicas, mas mesmo que você verificasse que uma impresora está online não há como garantir que ela não terá problemas no meio da impressão. Assim, a forma mais inteligente é deixar o trabalho para o spool e consultá-lo sobre o status do trabalho quando for de interesse.


Responder

Gostei + 0

28/08/2003

Machado

Por esses motivos tenho cada vez mais o prazer de fazer parte desta familia que está se tornando o clubedelphi. Muito obrigado.


Responder

Gostei + 0

28/08/2003

Allen74

De nada! :)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar