PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

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

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

asimoes escreveu: tente hb_IsPinter("LPT1")
Prezado qual LIB?
undefined reference to `_HB_FUN_HB_ISPINTER
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por asimoes »

de Paula,

Não tem lib, é função do harbour, provavelmente você vai ter que atualizar sua versão do harbour.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por asimoes »

De Paula,

Tem certeza que está fazendo assim:

HB_ISPRINTER("lpt1") ????
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

asimoes escreveu: Tem certeza que está fazendo assim:
HB_ISPRINTER("lpt1") ????
sim, com certeza!
e testei no CMD o seguinte comando que o JQuintas nos ensinou:

Código: Selecionar todos

hbmk2 -find hb_isprinter
e retornou como instalada.
Bom, então, fiz uma pequena mudança no seu código e testei e deu o resultado (aparentemente correto):

Código: Selecionar todos

hb_IsPrinter() // sem argumentos .... 

a resposta foi: .F. (impressora HP c4280 está desligada) (windows 10/64), pois aqui não tem LX300.
Agora vou testar numa LX 300 as seguintes hipóteses no win xp:
- impressora desligada
- impressora ligada.
Já até desanimei dessa questão, pois, vou fazer o teste, sem crer que o resultado será: .F. e .T., respectivamente.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

microvolution escreveu:Agora vou testar numa LX 300 as seguintes hipóteses no win xp:
- impressora desligada
- impressora ligada.
testei e sabe qual foi o resultado?
nem precisa postar...
simplesmente, o fladmir tinha razão, e, o asimoes tinha razão, e, o itamar, dr.soto, vSzakats, jquintas, e, tantos quantos já quebraram a cabeça com essa "porcaria de xx_printer()...
Agora tem um outro detalhe... se deixar tudo com o Win_prn (no lugar de usar os caracteres de fábrica da lx-300 @esc):
- além da impressão ser em pixels (mais lenta);
- está um pouco desalinhado para a direita; e o pior
- o win_prn, faz uma porcaria de EJECT automático, que gasta uma quantidade de papel "insignificante"?! quem dera, o cliente quase "cancelou o contrato" pelo telefone... imaginem se fosse pessoalmente?
o caso é de :)) ou de :'( ...
vlw!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por asimoes »

De Paula,

Você tentou pelo menos o try..catch ???
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

asimoes escreveu:Você tentou pelo menos o try..catch ???
então, é isso q estou tentando lhe explicar...
a única coisa q deve funcionar é o try.catch.end ...
lembra que cheguei a testar (lá no outro tópico) e deu errado pois faltava alguma coisa?
então, até q recebi sua resposta, já tinha arrumado (temporariamente para não deixar meu cliente me mandando para não sei aonde) a seguinte alternativa (paliativa):
- no menu de configurações e parãmetros do meu sistema criei o seguinte get (sem necessidade de mexer no banco de dados):

Código: Selecionar todos

@ 2,2 say "Irá usar impressora LX300/810 (LPT1 - paralela) ?" get mOPCAO valida ("SN")
aí essa informação (para não usar o banco de dados) vai para o registro do windows.
e transformo-a em:

Código: Selecionar todos

if mOPCAO = "S"
    lLPT := .t.
else
   lLPT := .f.
endif
No momento da impressão no lugar de usar:

Código: Selecionar todos

do while lastkey()<> 27 .and. .not. isprinter()

(... ou qualquer uma dessas b***** de funções que de nada servem)
mudei para:

Código: Selecionar todos

do while lastkey()<> 27 .and. .not. lLPT
Se o cliente for usar impressoras da lista do windows (pode alguém querer), aí vai lá em configurações e muda para "N".
Como o jquintas, asimoes, fladimir, eolo, pc, m.s., itamar, jairo, etc, e o próprio toledo, e, os demais deste tão conceituado fórum, têem dedicado tempo em nos abençoar...
com certeza, vou refazer o teste no try.cactch.end e posto o resultado aqui em breve.
Acho que outra solução também...
seria tratar o erro TERM/2014 error...
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por asimoes »

Cara é só com você que não funciona o Try..Catch
Ai fica difícil.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

asimoes escreveu:Cara é só com você que não funciona o Try..Catch
Ai fica difícil.
microvolution escreveu:lembra que cheguei a testar (lá no outro tópico) e deu errado pois faltava alguma coisa?
Então... o nobre professor entendeu errado...
lá no outro post só tinha TRY.CACTH aí eu disse, agora pouco:
microvolution escreveu:então, até q recebi sua resposta, já tinha arrumado (temporariamente para não deixar meu cliente me mandando para não sei aonde) a seguinte alternativa (paliativa):
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por Jairo Maia »

Olá Pessoal,
microvolution escreveu:Acho que outra solução também... seria tratar o erro TERM/2014 error...
O que prá mim está muito confuso, é que o erro TERM/2014 é um erro que ocorre quando se tenta abrir uma porta que não existe, ou está desabilitada pelo BIOS. Se a porta existe, mesmo não tendo impressora nela não pode ocorrer esse erro.

Quanto a tratar o erro TERM/2014 é perfeitamente possível através do ERRORSYS.PRG, mas particularmente acho melhor evitar alterar errorsys, salvo se não houver outro jeito.

Não sei se ajuda, mas dá para verificar se existe impressora usando determinada porta. Por exemplo:

Código: Selecionar todos

Function Main()

 Local lComLPT1:=.F., aPrinters:=GetPrinters( .T. )

 For x=1 To Len( aPrinters )
  If ( "LPT1" $ aPrinters[ x, 2 ] )  // pega o elemento 2 (porta da impressora)
   lComLPT1 := .T.  // tem impressora na LPT1
   Hb_Alert( "A Impressora: " + aPrinters[ x, 1 ] + " está usando a LPT1" )
   Exit
  EndIf
 Next
 
 If !lComLPT1
  Hb_Alert( "Nenhuma impressora usando LPT1" )
 EndIf
 
Return Nil
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por rochinha »

Amiguinhos,
É um falso positivo... "trazudindo"... não serve pra nada essa função do "harbour"...
Ainda bem que é do "Harbour", ka, ka, ka.

Vou continuar pesquisando.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

Jairo Maia escreveu:O que prá mim está muito confuso, é que o erro TERM/2014 é um erro que ocorre quando se tenta abrir uma porta que não existe
pois pra mim, eu tratava esse erro (no clipper) com o seguinte:

Código: Selecionar todos

do while lastkey()<>27 .and. .not. isprinter()
...
enddo
Isso impedia o TERM/2014...
bom foi só "uma ideia" que me veio á cabeça, mas, vou tentar mesmo é o try.catch.end e postar aqui a minha satisfação ou não!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por asimoes »

De Paula,

Essa sua impressora epson é porta paralela ou usb?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por asimoes »

Amiguinho,

Pesquisando no google achei uma função em c++, fiz uma adaptação para funcionar com harbour, atenção: eu não tenho impressora matricial para testar.
Então segue o código, o retorno esperado se tem impressora é .T. ou .F.

Código: Selecionar todos

L:=TESTELPT("LPT1:")

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbstack.h"
#include "hbapiitm.h"

HB_FUNC( TESTELPT )

{
   BOOL bRetorno = FALSE;
   HANDLE hComm = CreateFileA( hb_parc (1), GENERIC_READ | GENERIC_WRITE, 
      0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

      DCB status = {0};
      BOOL success = GetCommState(hComm, &status);
      
      bRetorno = success;
      
      hb_retl(bRetorno);

}

#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line

Mensagem por microvolution »

asimoes escreveu:Essa sua impressora epson é porta paralela ou usb?
vou responder a essa pergunta com 2 respostas:
1 - No meu computador tem 2 instalações do windows (xp/32 e 10/64) e nesse aqui, só tenho HP multifucional, também não tenho matricial alguma sequer.
2 - No outro computador (só win xp/32), nele, sim, tem uma impressora matricial (lpt1), EPSON LX300 (não é USB) é porta paralela (lpt1 ou prn).
asimoes escreveu:Pesquisando no google achei uma função em c++, fiz uma adaptação para funcionar com harbour, atenção: eu não tenho impressora matricial para testar.
Vou testar, mas, como disse o próprio Viktor, não há solução para essa tarefa, pois o problema (como ele mesmo disse) não é do harbour e sim do windows...
veja no grupo do google que ele mesmo disse:
union REGS regs;
regs.h.ah = 2; //Serviço 2 ler o status regs.x.dx = 0; //0 é a porta LPT1
int86(0x17,& regs,& regs);//Interrupção da impressora
return( regs.h.ah ); //Retorna um byte de status


Indeed. This logic is included in Harbour
since 1999-10-25 12:37 — the initial commit of:

https://github.com/harbour/core/blob/ma ... /isprint.c

It requires a direct BIOS call, so to use it, you'll need
an MS-DOS build of Harbour.
Please realise it's an MS-DOS vs. modern-OS issue,
_not_ a Clipper vs. Harbour issue. See answers above.

There do exist Windows API to query the status of printer
queues (f.e. "offline"), if that's of any help. Example:

https://github.com/vszakats/harbour-cor ... s/prn3.prg

No personal experience with it, though, I do hb_vfWrite()
to \\server\queue, TCP port 9100, cupsPrintFile() or create
a .pdf.
Mais informações, no link: https://groups.google.com/forum/#!topic ... phW9lXb17o
vlw pela boa ajuda e intenção... vou tentar esse código...
aliás, não sei o porquê que meu sistema começou de uma hora para a outra dar mensagens de "bug" nos códigos C/C++ embutidos no código .PRG. Criei um tópico só pra isso
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder