Alternativa ao ISPRINTER no Windows XP a afins

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Carlos Leonam
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 17 Fev 2009 11:47
Localização: Alagoas

Alternativa ao ISPRINTER no Windows XP a afins

Mensagem por Carlos Leonam »

Olá a todos!

Um cliente bem antigo me solicitou alterações nos fontes do sistema dele para permitir a impressão em rede sem os costumeiros erros de impressora desconectada em rede.

Pesquisei no forum e não achei nada que pudesse me ajudar.

Então criei a alternativa seguinte para substituir o ISPRINTER e outros. Sei que não é a melhor solução, mas para mim funcionou, espero que seja de utilidade para outro clippeiro.

Obs: Não comentei o código por pura falta de tempo. Mas se alguém precisar eu volto e comento.

Abraços. :)Pos

Código: Selecionar todos

FUNCTION CHECAIMP(cLPT)
LOCAL lVOLTA := .F., lLPT_VALID := .F., lLPTMAPOK := .F. ,;
      cLPT_LIDA, cLPT_STATUS, cLPT_MAP
   cLPT := UPPER(STRTRAN(cLPT,':'))
   IF LEN(cLPT)==1
      IF VAL(cLPT)>=1 .AND. VAL(cLPT)<=3
         cLPT := 'LPT'+cLPT
      ENDIF
   ENDIF
   IF cLPT $ 'LPT1|LPT2|LPT3'
      lLPT_VALID := .T.
   ENDIF
   IF lLPT_VALID
      cCOMANDO := 'NET USE > NETIMP' + RIGHT(cNETNAME,2) +'.TXT'
      !(cCOMANDO)
      IF FILE('NETIMP' + RIGHT(cNETNAME,2) +'.TXT')
         HANDLE = FOPEN('NETIP'+cVOLTA+'.TXT')
         WHILE .NOT. FEOF(HANDLE)
            TEMP = FREADLINE(HANDLE)
            IF ' LPT'$TEMP
               cLPT_STATUS := UPPER(TOKEN(TEMP,' ',1))
               cLPT_LIDA := UPPER(TOKEN(TEMP,' ',2))
               cLPT_MAP := UPPER(TOKEN(TEMP,' ',3))
               IF 'DESCON'$cLPT_STATUS
                  lLPTMAPOK := NETREDIR(cLPT_LIDA+":",cLPT_MAP)
               ENDIF
               IF cLPT$cLPT_LIDA .AND. lLPTMAPOK
                  lVOLTA := .T.
               ENDIF
            ENDIF
         ENDDO
         FCLOSE(HANDLE)
      ELSE
         lVOLTA := ISPRINTER()
      ENDIF
   ELSE
      DBOX('Porta de Impressora Invalida: '+cLPT)
      lVOLTA := .F.
   ENDIF
RETURN (lVOLTA)
Editado pela última vez por Toledo em 11 Ago 2010 12:45, em um total de 2 vezes.
Razão: O presente tópico foi movido da seção CA-Clipper, uma vez que seu conteúdo está relacionado como um dica e/ou contribuição.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Alternativa ao ISPRINTER no Windows XP a afins

Mensagem por fladimir »

Colega estava pensando numa solução para este tipo de questáo, pois recebo vários e-mails do meu sistema com o erro q náo conseguiu imprimir devido náo achar a Porta tipo não estava mapeada a impressora, esta solução do colega é interessante vou testar e posto o mais breve possível o resultado da mesma....

Agora uma idéia q tive tb é a de Modifinar no ErrorSys.Prg pra qdo identificar um erro deste tipo salvar o relatório em um arquivo texto.

O q os colegas acham? (Srs. Moderadore(a)s, aki nas contribuições pode-se discutir da maneira da minha questão?)


Sds.

Sucesso!!!

:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: Alternativa ao ISPRINTER no Windows XP a afins

Mensagem por Pablo César »

O q os colegas acham? (Srs. Moderadore(a)s, aki nas contribuições pode-se discutir da maneira da minha questão?)
Na minha opinião, não vejo por quê não poder contribuir com outros exemplos ou até mesmo complementação da rotina neste mesmo tópico. Isso ajuda a enriquecer a mesma idéia. Outra razão, é que esta seção chama-se também "dicas" portanto não vejo impedimento algum.

Eu até mesmo queria deixar a minha observação, pois este assunto deve interessar a muitos.
Agora uma idéia q tive tb é a de Modificar no ErrorSys.Prg pra qdo identificar um erro deste tipo salvar o relatório em um arquivo texto.
Até seria contornável para posteriormente direcionar essa impressão em outra impressora, mas teria que dispor do arquivo de impressão mesmo antes dessa verificação. No entanto esse recurso não tem inteiração com o status da própria impressora quando falta papel ou estiver desligada. Pois a mensagem que aparece é do SO e vem em forma de Dialog Box do Windows, quando é impossibilitada de imprimir. Pelo que entendí do código do colega Carlos, serviria para verificar se a impressora está mapeada dando o status do comando NET USE. Pelo que me consta, esse status não é tão abrangente ao ponto de verificar se ela está desligada ou até mesmo com falta de papel. Desculpem, não queria parecer pessimista, mas a idéia do colega merece até um certo crédito, mesmo que incapaz de abranger outros casos como obter em tempo real o status da impressora como era feito no WIN98 com impressora conectada em modo local na LPT1.

No exemplo do Carlos ficou faltando o parâmetro ou a definição da variável cNETNAME. Também tem outras varíaveis que menciona na linha 17 que acredito que houve erro de digitação ou correção.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Carlos Leonam
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 17 Fev 2009 11:47
Localização: Alagoas

Re: Alternativa ao ISPRINTER no Windows XP a afins

Mensagem por Carlos Leonam »

No exemplo do Carlos ficou faltando o parâmetro ou a definição da variável cNETNAME. Também tem outras varíaveis que menciona na linha 17 que acredito que houve erro de digitação ou correção.
Ops! "A pressa é inimiga da perfeição". Vamos as correções.

cNETNAME é uma variável pública que retorna a função NETNAME(), que não foi usada diretamente por necessitarmos também identificar a estação apenas pelo IP (Telnet LAN e WAN, sendo nesta última consultada tabela de autorizações de acesso).

Quanto ao cVOLTA da linha 17, trata-se do último octeto do IP da estação. Foi a forma que utilizei para individualizar o arquivo do "dump" do NET USE.

Nas minhas pesquisas pela internet, vi alguma coisa que tratava vários retornos das impressoras Windows. Se eu encontrar novamente volto a postar.

Abraços.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Re: Alternativa ao ISPRINTER no Windows XP a afins

Mensagem por fladimir »

Ok, mas então como ficam as definições destas variáveis?

O colega poderia postar...

Sds.

Sucesso!!!

:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder