Página 1 de 1

A funcao PrinterPortToName() do xhb

Enviado: 08 Abr 2008 10:54
por marcos.gurupi
Caros estou tentando verificar (no sistema) c a impressora estah conectada
ou mesmo c a porta LPT estah com uma impressora online, estou usando o
exemplo abaixo, mas estah sempre me retornando vazio. O q estou fazendo
errado?

IF Empty(PrinterPortToName(Alltrim(CONFIG->por01)))
vStatus01:="Desconectada"
oStatus01:SetText(vStatus01)
Else
vStatus01:="Conectada"
oStatus01:SetText(vStatus01)
ENDIF


Marcos Roberto

Enviado: 08 Abr 2008 11:05
por sygecom
Olá Marcos,
em "CONFIG->por01" deve esta assim por exemplo "LPT1:" se faltar alguma coisa como por exemplo ":" ele vai babar seu teste ! de uma olhada no exemplo que esta no HELP do xHarbour.

Enviado: 08 Abr 2008 11:08
por marcos.gurupi
Mas mesmo eu fazendo assim:
PrinterPortToName("LPT2",.T.)

Ele me retorna vazio e eu sei q tem uma impressora instalada na porta LPT2 (em rede eh claro).

Marcos Roberto

Enviado: 08 Abr 2008 11:21
por sygecom
Marcos, esta faltando o ":" ou seja ficaria assim:
PrinterPortToName("LPT2:")

Enviado: 08 Abr 2008 11:53
por marcos.gurupi
Fiz assim:
PrinterPortToName("LPT2:",.T.)

Existe uma impressora instalada na LPT2 mas a funcao estah retornando vazio.

Marcos Roberto.

Enviado: 08 Abr 2008 12:34
por sygecom
Olá Roberto,
Fiz o teste conforme esta no HELP e aqui me retornou as impressora certinha:

Código: Selecionar todos

// The example queries the printer ports LPT1: to LPT5: and
// lists the names of connected printers

   PROCEDURE Main()
      LOCAL aPrinters := {}
      LOCAL i, cPrinter, cPort

      FOR i:=1 TO 5
         cPort    := "LPT" + LTrim( Str(i) ) + ":"
         cPrinter := PrinterPortToName( cPort )
         IF .NOT. Empty( cPrinter )
            AAdd( aPrinters, { cPort, cPrinter } )
         ENDIF
      NEXT

      IF Empty( aPrinters )
         ? "No printer found"
      ELSE
         AEval( aPrinters, {|a| Qout( a[1], a[2] ) } )
      ENDIF

   RETURN

A funcao PrinterPortToName() do xhb

Enviado: 19 Fev 2016 16:24
por microvolution
Olá sygecom... estou precisando de sua ajuda...
até antes de migrar para o clipper em janeiro/2015, a função ISPRINTER() que é nativa do clipper funcionava perfeitamente.
E, como é este funcionava para mim?
Bom, está no meu código desde 1998 (ano) assim:

Código: Selecionar todos

do while (lastkey () <> K_ESC .and. .not. isprinter ())
acontece que após migrar para harbour 3.4.0, não mais funciona corretamente.
E, funcionar corretamente pra mim sempre foi assim:
se existir impressora - .t.
se não existir impressora - .f.
se a impressora estiver instalada e ligada - .t.
se a impressora estiver instalada e desligada - .f.
se a impressora existir, ligada, mas o cabo desconectado - .f.
Então já tentei de tudo... tanto em windows XP (32), windows 7 (32 bits) e agora em windows 10 (64 bits)... o retorno é sempre o mesmo (.f.) não há condição que funcione.
Testei o seu exemplo
marcos.gurupi escreveu:PrinterPortToName("LPT2:",.T.)
, ou melhor, fiz todo o código de sua última postagem e o resultado é assim:
se existir uma impressora instalada e ligada --> .t.
se existir uma impressora instalada e desligada --> .t.
se não existir uma impressora instalada aí sim --> .f.

Então, as 2 primeiras informações não estão corretas...
bom já tentei de tudo:

Código: Selecionar todos

      // do while (lastkey () <> K_ESC .and. .not. isprint ())
      // do while (lastkey () <> K_ESC .and. .not. ft_IsPrint ())
      // do while (lastkey () <> K_ESC .and. .not. isprinter ())
      // do while (lastkey () <> K_ESC .and. .not. hb_IsPrinter ())
      do while (lastkey () <> K_ESC .and. .not. EMPTY( PRINTERPORTTONAME( "lpt1:", .T. ) ) ) 
      // do while (lastkey () <> K_ESC .and. .not. sprintf ())
      // do while (lastkey () <> K_ESC .and. .not. PrintReady (1))
      // do while (lastkey () <> K_ESC .and. .not. PrinterExists ())
      // do while (lastkey () <> K_ESC .and. .not. PrinterPortToname ())
      // do while (lastkey () <> K_ESC .and. .not. XIsPrinter(1))
      // do while (lastkey () <> K_ESC .and. .not. NetPrinter())
      // do while (lastkey () <> K_ESC .and. .not. ERR_print_errors(BIO_new_fd( 1, HB_BIO_NOCLOSE )))
todos os códigos acima, dão sempre a mesma coisa... não importa se a impressora está ligada ou não... se houver ela instalada, retorna como .t.
E, antes de migrar, só retornava .t. se a impressora estivesse ligada, e, no caso fiz um loop que enquanto o usuário não pressiona a tecla ESC ou não resolva o problema da impressora o do/while não é encerrado.
Você ou alguém pode ajudar?