Página 1 de 1

Alternativa ao ISPRINTER no Windows XP a afins

Enviado: 11 Ago 2010 11:52
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)

Re: Alternativa ao ISPRINTER no Windows XP a afins

Enviado: 11 Ago 2010 21:39
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

Re: Alternativa ao ISPRINTER no Windows XP a afins

Enviado: 12 Ago 2010 11:24
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.

Re: Alternativa ao ISPRINTER no Windows XP a afins

Enviado: 17 Ago 2010 06:31
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.

Re: Alternativa ao ISPRINTER no Windows XP a afins

Enviado: 17 Ago 2010 09:18
por fladimir
Ok, mas então como ficam as definições destas variáveis?

O colega poderia postar...

Sds.

Sucesso!!!

:)Pos