Dúvida com rotina para verificar status da impressora

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida com rotina para verificar status da impressora

Mensagem por porter »

olá pessoal,
Essa rotina, encontrei aqui no fórum, ela tem o propósito de verificar qual o status atual da impressora, mas estou com dúvida com
esses comandos:

Function PrintOnLine(vcPrintOn) --> qual parâmetro devo informar, do que se trata vcPrintOn ?
local nStatus := PrintStat(vcPrintOn) --> Função PrintStat, devo acrescentar alguma lib ou tenho que criar essa função manualmente ?
local nStatus := PrnStatus(vcPrintOn) --> Função PrnStatus, devo acrescentar alguma lib ou tenho que criar essa função manualmente ?

Harbour 3.2.0 (dev)

Código: Selecionar todos

********************************************************************************	   	    	   	 
Function PrintOnLine(vcPrintOn)
****************************************
   	* Funcao para verificar o
   	* status da impressora
   	* selecionada, local ou em rede
   	*****************************************
         local nStatus := PrintStat(vcPrintOn)
         local nStatus := PrnStatus(vcPrintOn)
         if nStatus > 0
            Alert("Condicao da impressora: " + IsImpressora(vcPrintOn))
         endif
         return .t.
	   
********************************************************************************	   	    	
function IsImpressora( QuePrinter )
   	*****************************************
   	* Funcao para retornar a mesnagem de
   	* status da impressora
   	*****************************************
   	   LOCAL nStatus
   	   nStatus := PrintStat( QuePrinter )
   	   if     nStatus <        1 ; return "OK"
   	   elseif nStatus =        1 ; return "Impressora Pausada"
   	   elseif nStatus =        2 ; return "Impressora com Erro"
   	   elseif nStatus =        4 ; return "Impressora Deletando"
   	   elseif nStatus =        8 ; return "Impressora em Modo Bandeja"
   	   elseif nStatus =       16 ; return "Impressora Sem Papel"
   	   elseif nStatus =       32 ; return "Impressora em Modo Manual"
   	   elseif nStatus =       64 ; return "Impressora com Problema no Papel"
   	   elseif nStatus =      128 ; return "Impressora OffLine"
   	   elseif nStatus =      256 ; return "Impressora com IO Ativo"
   	   elseif nStatus =      512 ; return "Impressora Ocupada"
   	   elseif nStatus =     1024 ; return "Impressora Imprimindo"
   	   elseif nStatus =     2048 ; return "Impressora Memoria Lotada"
   	   elseif nStatus =     4096 ; return "Impressora Nao Instalada"
   	   elseif nStatus =     8192 ; return "Impressora Aguardando"
   	   elseif nStatus =    16384 ; return "Impressora Processando"
   	   elseif nStatus =    32768 ; return "Impressora Inicializando"
   	   elseif nStatus =    65536 ; return "Impressora em Atencao"
   	   elseif nStatus =   131072 ; return "Impressora Toner Baixo"
   	   elseif nStatus =   262144 ; return "Impressora Sem Toner"
   	   elseif nStatus =   524288 ; return "Impressora PAGE_PUNT"
   	   elseif nStatus =  1048576 ; return "Impressora Intervencao do Usuario"
   	   elseif nStatus =  2097152 ; return "Impressora Sem Memoria"
   	   elseif nStatus =  4194304 ; return "Impressora Tampa Aberta"
   	   elseif nStatus =  8388608 ; return "Impressora Servidor Desconhecido"
   	   elseif nStatus = 16777217 ; return "Impressora POWER_SAVE"
   	   endif
   	   return(nil)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Dúvida com rotina para verificar status da impressora

Mensagem por Toledo »

Amigo, a vcPrintOn deve ser o nome da impressora.
A função PrintStat() é da lib hbct do xHarbour, no Harbour 3.2 tem ela na lib xhb, mas é apenas para compatibilidade e não importa o status da impressora, sempre vai retornar 0.
Já a função PrnStatus() é da FiveWin.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida com rotina para verificar status da impressora

Mensagem por porter »

A função PrintStat() é da lib hbct do xHarbour, no Harbour 3.2 tem ela na lib xhb, mas é apenas para compatibilidade e não importa o status da impressora, sempre vai retornar 0.
Já a função PrnStatus() é da FiveWin.
olá Toledo,
Entrei no site abaixo, e fiz o download do FiveWin 1.0, no arquivo.HBP, acrescentei
-iC:\fivewin\trunk\fivewin1.0\include o #include "fivewin.ch" coloquei no inicio do PRG,
e ele está sendo encontrado, mas está dando erro na compilação :

undefined reference to HB_FUN_TSAY
collect2.exe: error: ld returned 1 exit status
hbmk2[ESTOQUE]: Erro: Executando linkeditor. 1

HARBOUR 3.2.0(dev)

https://code.google.com/archive/p/fivew ... ult/source
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida com rotina para verificar status da impressora

Mensagem por porter »

O problema que estou encontrando, é que as vezes a fila de impressão fica congestionada, então não consigo
imprimir pela rede, com essa função gostaria de dar uma mensagem para o usuário avisando o problema.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Dúvida com rotina para verificar status da impressora

Mensagem por Kapiaba »

Olá Porter, está em: SAY.PRG ou você não linkou as libs do Five.

Se esse fivewin estiver completo, as classes estão em: C:\FWH..\SOURCE\CLASSES

Você pode baixar a minha primeira versão FWH2.7 em 32 bits, autorizado pelo Antonio Liñares, aqui:

https://www.4shared.com/rar/v5Q3qkH-ba/FWH27.html

Ai, você verá como é completo.

Abs.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Dúvida com rotina para verificar status da impressora

Mensagem por Kapiaba »

Porter, o SPOOL da impressora está ligado? Nem em Fivewin, você consegue mandar mensagem de impressora.

A não ser, perguntar se a impressora está "Pronta?" . No Windows, o comando ISPRINTER(), não funciona.

Abs
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Dúvida com rotina para verificar status da impressora

Mensagem por porter »

Olá Porter, está em: SAY.PRG ou você não linkou as libs do Five.
Se esse fivewin estiver completo, as classes estão em: C:\FWH..\SOURCE\CLASSES
Você pode baixar a minha primeira versão FWH2.7 em 32 bits, autorizado pelo Antonio Liñares, aqui:
https://www.4shared.com/rar/v5Q3qkH-ba/FWH27.html

Ai, você verá como é completo.

Porter, o SPOOL da impressora está ligado? Nem em Fivewin, você consegue mandar mensagem de impressora.

A não ser, perguntar se a impressora está "Pronta?" . No Windows, o comando ISPRINTER(), não funciona.
Olá Kapiaba, apenas acrescentei -iC:\fivewin\trunk\fivewin1.0\include no HBP, e #include "fivewin.ch" no PRG
e tentei compilar, estou tentando fazer com o prnstatus do FiveWin conforme rotina no começo do tópico, mas
se nem com o FiveWin consigo verificar o SPOOL da impressora, não vai adiantar eu prosseguir com essa rotina.
O SPOOL da impressora está ligado, sempre acontece da fila de impressão ficar congestionada e não conseguir
imprimir pela rede, então tenho que sempre esvaziar o SPOOLER, não sei se esse problema acontece por se tratar de um XP na estação.
Vou baixar a versão que você sugeriu e tentar compilar pelo menos para aprender a usar outras funções do FiveWin.

Obrigado.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Dúvida com rotina para verificar status da impressora

Mensagem por Kapiaba »

Porter, em Fivewin essa funcao simples, poderia ajudar. Mesmo assim, tenho dúvidas, se o windows aceita de boa.

Código: Selecionar todos

FUNCTION isPrinterReady( oPrn )

RETURN !Empty( oPrn:hDC )
Veja se consegue algo semelhante para a linguagem que voce usa.

abs.
Responder