Página 5 de 7

Funçao ISPRINTER()

Enviado: 20 Fev 2016 17:04
por microvolution
pessoal... fuçando aqui na minhas velharias, encontrei um código de 2004 que já usei no passado...
então entre as chamas, coloquei, pra que se der certo (alguém desvendar), pode ser a solução definitiva:
#pragma begin

Código: Selecionar todos

// Funções: PrintValor() e StatusPrint()
// Objetivo: Acessar a impressora através do BIOS
// Copyright(c) 1999-2016, MVinfo (Microvolution Informática)
// Todos os Direitos Reservados by RCOM
// ---------------------------------------------------------------
// Envia um byte para a impressora
void PrintValor(unsigned char Valor);
{  
  union REGS regs;
  regs.h.ah = 0; // Servico de impressão
  regs.h.al = Valor;
  regs.x.dx = 0; // 0 é a porta LPT1, 1, a LPT2 
  int86(0x17,& regs,& regs); // Interrupção da impressora
} 

// Ler o status da impressora
unsigned char StatusPrint(void)
{ 
   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
}

#pragma enddump
Infelizmente, antes de fazer a chamada para teste, apenas compilar pra ser o comportamento já gera uma série de erros. Vejam:

Código: Selecionar todos

rotinas5.prg: In function 'StatusPrint':
rotinas5.prg:11689:15: error: storage size of 'regs' isn't known
rotinas5.prg:11692:4: warning: implicit declaration of function 'int86' [-Wimplicit-function-declaration]
rotinas5.prg:11689:15: warning: unused variable 'regs' [-Wunused-variable]
rotinas5.prg:11694:1: warning: control reaches end of non-void function [-Wreturn-type]
Alguém sabe como melhorar nossa função?
E como chamá-la de dentro do código harbour?
Ela deveria enviar/receber um byte da impressora... então se não houver comunicação haverá um erro...

Funçao ISPRINTER()

Enviado: 20 Fev 2016 17:10
por rochinha
Amiguinhos,

As funções GetProfileString e WriteProfileString fazem parte da kernel32.dll e servem para pegar e escrever informações no registro.

Como não encontro o site que tinha a referencia de cada biblioteca, cada função e o código de cada uma, pois ele foi hackeado recentemente, não tenho como lhe informar com exatidão qual biblioteca o mesmo necessita.

Olhando o win_prn2.c não a encontrei, mas sim referencia a função real da API.

Já no código abaixo podemos notar a menção de what32 e talvez pensar que a mesma foi portada para Harbour e que provavelmente exista uma hb_what32:

Código: Selecionar todos

/*
 * $Id: winini.prg 8045 2007-11-25 18:36:59Z vouchcac $
 */

// WHAT32

* Useful .INI Interface enhancements


// Get from private Ini

*-----------------------------------------------------------------------------*

FUNCTION GetPrivateProfileLog( cSection, cEntry, lDefault, cFile )

  LOCAL cDefault:=IF(lDefault,"YES","NO")
  LOCAL cRet:=GetPrivateProfileString(cSection, cEntry, cDefault, cFile )

  RETURN(UPPER(cRet) $ "YESON1")

*-----------------------------------------------------------------------------*

FUNCTION GetPrivateProfileFloat(cSection, cEntry, nDefault, cFile )

  LOCAL cDefault:=STR(nDefault)
  LOCAL cRet:=GetPrivateProfileString(cSection, cEntry, cDefault, cFile )

  RETURN(VAL(cRet))

*-----------------------------------------------------------------------------*

FUNCTION GetPrivateProfileDate( cSection, cEntry, dDefault, cFile )

  LOCAL cDefault:=DTOS( dDefault )
  LOCAL cRet:=GetPrivateProfileString(cSection, cEntry, cDefault, cFile )

  RETURN(STOD( cRet ))


// Get from Win.Ini

*-----------------------------------------------------------------------------*

FUNCTION GetProfileLog( cSection, cEntry, lDefault )

  LOCAL cDefault:=IF(lDefault,"YES","NO")
  LOCAL cRet:=GetProfileString(cSection, cEntry, cDefault )

  RETURN(UPPER(cRet) $ "YESON1")

*-----------------------------------------------------------------------------*

FUNCTION GetProfileFloat(cSection, cEntry, nDefault )

  LOCAL cDefault:=STR(nDefault)
  LOCAL cRet:=GetProfileString(cSection, cEntry, cDefault )

  RETURN(VAL(cRet))

*-----------------------------------------------------------------------------*

FUNCTION GetProfileDate( cSection, cEntry, dDefault )

  LOCAL cDefault:=DTOS( dDefault )
  LOCAL cRet:=GetProfileString(cSection, cEntry, cDefault )

  RETURN(STOD( cRet ))


// Write to Private Ini

*-----------------------------------------------------------------------------*

FUNCTION WritePrivateProfileInt( cSection, cEntry, nData, cFile )

  RETURN( WritePrivateProfileString( cSection, cEntry, STR( INT(nData) ), cFile ) )

*-----------------------------------------------------------------------------*

FUNCTION WritePrivateProfileLog( cSection, cEntry, lData, cFile )

  RETURN( WritePrivateProfileString( cSection, cEntry, IF(lData,"Yes","No") , cFile ) )

*-----------------------------------------------------------------------------*

FUNCTION WritePrivateProfileFloat( cSection, cEntry, nData, cFile )

  RETURN( WritePrivateProfileString( cSection, cEntry, STR( nData ) , cFile ) )

*-----------------------------------------------------------------------------*

FUNCTION WritePrivateProfileDate( cSection, cEntry, dData, cFile )

  RETURN( WritePrivateProfileString( cSection, cEntry, DTOS( dData ) , cFile ) )



// Write to Win.Ini

*-----------------------------------------------------------------------------*

FUNCTION WriteProfileLog( cSection, cEntry, lData )

  RETURN( WriteProfileString( cSection, cEntry, IF(lData,"Yes","No") ) )


*-----------------------------------------------------------------------------*

FUNCTION WriteProfileFloat( cSection, cEntry, nData )

  RETURN( WriteProfileString( cSection, cEntry, STR( nData ) ) )

*-----------------------------------------------------------------------------*

FUNCTION WriteProfileDate( cSection, cEntry, dData )

  RETURN( WriteProfileString( cSection, cEntry, DTOS( dData ) ) )

*-----------------------------------------------------------------------------*


FUNCTION WriteProfileInt( cSection, cEntry, nData )

  RETURN( WriteProfileString( cSection, cEntry, STR( INT(nData) ) ) )
Portanto lhe afirmar com certeza qual a biblioteca correta não dá sem uma referências dos autores.

Para não ficar te devendo veja um pedaço de meu buildh.bat:

Código: Selecionar todos

echo %hdirl%\hbrtl.lib       + >> b32.bc
echo %hdirl%\hbvm.lib        + >> b32.bc
echo %hdirl%\%GT%.lib        + >> b32.bc
echo %hdirl%\gtstd.lib       + >> b32.bc
echo %hdirl%\gtcgi.lib       + >> b32.bc
echo %hdirl%\hblang.lib      + >> b32.bc
echo %hdirl%\hbmacro.lib     + >> b32.bc
echo %hdirl%\hbrdd.lib       + >> b32.bc
echo %hdirl%\rddntx.lib      + >> b32.bc
echo %hdirl%\rddcdx.lib      + >> b32.bc
echo %hdirl%\rddfpt.lib      + >> b32.bc

echo %hdirl%\rddsql.lib      + >> b32.bc
echo %hdirl%\sddodbc.lib     + >> b32.bc
echo %hdirl%\sddmy.lib       + >> b32.bc

echo %hdirl%\hbsix.lib       + >> b32.bc
echo %hdirl%\hbdebug.lib     + >> b32.bc
echo %hdirl%\hbcommon.lib    + >> b32.bc
echo %hdirl%\hbpp.lib        + >> b32.bc
echo %hdirl%\hbcpage.lib     + >> b32.bc
echo %hdirl%\hbwin.lib       + >> b32.bc
echo %hdirl%\hbcplr.lib      + >> b32.bc
echo %hdirl%\hbct.lib        + >> b32.bc
echo %hdirl%\hbnf.lib        + >> b32.bc
echo %hdirl%\hbextern.lib    + >> b32.bc
echo %hdirl%\xhb.lib         + >> b32.bc
echo %hdirl%\hbtip.lib       + >> b32.bc
echo %fwh%\lib\adordd.lib        + >> b32.bc
echo %hdirl%\hbusrrdd.lib    + >> b32.bc

echo %hdirl%\hboleaut.lib       + >> b32.bc

echo %hdirl%\hbhpdf.lib      + >> b32.bc
echo %hdirl%\libhpdf.lib      + >> b32.bc
echo %hdirl%\hbzebra.lib     + >> b32.bc

echo %bcdir%\lib\cw32.lib          + >> b32.bc
echo %bcdir%\lib\uuid.lib          + >> b32.bc
echo %bcdir%\lib\import32.lib      + >> b32.bc
echo %bcdir%\lib\ws2_32.lib        + >> b32.bc

echo %bcdir%\lib\pcrepos.lib       + >> b32.bc
echo %bcdir%\lib\psdk\ole32.lib    + >> b32.bc
echo %bcdir%\lib\psdk\gdi32.lib    + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib   + >> b32.bc
echo %bcdir%\lib\psdk\user32.lib   + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib  + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\msimg32.lib  + >> b32.bc
echo %bcdir%\lib\psdk\psapi.lib    + >> b32.bc
echo %bcdir%\lib\psdk\shell32.lib  + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib,  >> b32.bc
Geralmente estas funções estão na hbWin.lib

Funçao ISPRINTER()

Enviado: 20 Fev 2016 17:26
por microvolution
asimoes escreveu:A informação do try..catch estava neste assunto na página 3
desculpa pela desatenção... é que estou postando e lendo em tantos lugares q já nem sei mais onde estou.. :'(
adaptei o seu exemplo assim:

Código: Selecionar todos

      do while lastkey () <> K_ESC
           try
               SET DEVICE TO PRINTER 
               SET PRINTER TO LPT1
               SET PRINT ON
           catch
            if .not. CONFIRMA3 ( 'A Impressora Matricial LPTx Está Pronta?' , 1 , 'SiCCA v3.6 - Verifique Sua Impressora Matricial (paralela)' ) == 1
               if .not. CONFIRMA3 ('Deseja Então Usar Outra Impressora ( USB, em Rede, etc) ',1,'SiCCA v3.6 - Impressoras Alternativas') == 1
                  * Abandona o programa // acrescentada p/ parar erro na RIMPR000 na funτπo CONFIG_COMANDO (linha 300) 14/12/15w
                  keyboard chr (K_ESC) // acrescentada p/ parar erro na RIMPR000 na funτπo CONFIG_COMANDO (linha 300) 14/12/15w
                  inkey () // acrescentada p/ parar erro na RIMPR000 na funτπo CONFIG_COMANDO (linha 300) 14/12/15w
                  lUSB := .f.
                  return .f.
                  exit // acrescentada p/ parar erro na RIMPR000 na funτπo CONFIG_COMANDO (linha 300) 14/12/15w
               else // acrescentada p/ parar erro na RIMPR000 na funτπo CONFIG_COMANDO (linha 300) 14/12/15w
                  lUSB := .t.
                  mUSBPRN := substr (dtos(date()),3,2) + substr (dtos(date()),5,2) + left (time(),2) + substr (time(),4,2) + right (time(),2)
                  exit
               endif
           endif
      enddo
Mas, como não sei nem como é a sintaxe desse try.cath gerou a seguinte mensagem erro:

Código: Selecionar todos

pci10001.prg(3341) Error E0020  Incomplete statement or unbalanced delimiters
pci10001.prg(3345) Error E0020  Incomplete statement or unbalanced delimiters

Lines 1331, Functions/Procedures 17
Generating C source output to 'C:\Users\wal\AppData\Local\Temp\hbmk_ncwytf.dir\pci10151.c'... Done.
Compiling 'pci10152.prg'...
2 errors
fladimir escreveu:Sem querer desanimar, pq posso estar errado, mas na época testei de tudo quanto foi jeito q pude, e o q melhor resolveu foi o Try Catch.
:-Y
Prezado professor Fladimir, as suas palavras sempre estiveram certas... infelizmente! :(
Dá pra o nobre professor olhar meu código e me dar mais uma dica, ou postar o seu que deu certo?
:%

Funçao ISPRINTER()

Enviado: 20 Fev 2016 17:39
por microvolution
rochinha escreveu:As funções GetProfileString e WriteProfileString
desculpa a minha ignorância.
Prezado professor, como usamos essas funções para substituir ISPRINTER()?
gracias!

Funçao ISPRINTER()

Enviado: 21 Fev 2016 21:23
por microvolution
boa noite! primeiro dia e domingo sem esse "horário verão"! rsrs
bom, o Viktor informou para mim o código que tem no seu site, que é uma função ISPRINT.C (harbour/core). Alguém sabe como integrar ao nosso código .PRG e como chamar e usar (sintaxe)?
vejam as respostas que ele (Szakats) nos reportou:
1ª:
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.
2ª:
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.
Quanto ao TRY.CATCH perceberam a minha dúvida que postei anteriormente?

Funçao ISPRINTER()

Enviado: 22 Fev 2016 09:08
por Jairo Maia
Olá Microvolution,

Não tenho também solução para isso, e confesso que também gostaria muito de poder ter esse controle, mas infelizmente pelo que o Viktor diz isso não é possível pelo que entendi:

1 - Na primeira mensagem ele diz:
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
De fato. Essa lógica está incluida no Harbour desde 25/10/1999 às 12:37 - na atualização inicial de: (link quebrado, mas deu para entender apontando para isprint.c).

Porém, ele completa dizendo:
It requires a direct BIOS call, so to use it, you'll need an MS-DOS build of Harbour.
Isso requer uma chamada direta a BIOS, então para usar isso você precisará do Harbour compilado para MS-DOS.
Usar Harbour compilado para MS-DOS na minha opinião é o mesmo que usar Clipper, apenas com alguns recursos a mais. Acho que não vale a pena.

2 - Na segunda Mensagem ele diz:
Please realise it's an MS-DOS vs. modern-OS issue, _not_ a Clipper vs. Harbour issue. See answers above.
Por favor, entenda que isso é um problema entre MS-DOS versus o Sistema Operacional Moderno (Windows), não um problema entre Clipper versus Harbour. E completa dizendo: Veja a resposta abaixo, que é:
There do exist Windows API to query the status of printer queues (f.e. "offline"), if that's of any help.
Não existe funções da API do Windows que permita verificar o estatus da impressora (quanto a estar "indisponível" ["offline"]), se é que isso ajuda em algo.

E finalmente completa apontando com um exemplo que leva ao arquivo prn3.prg para que você o estude, são apenas sugestões, mas não a solução para seus questionamentos, e deixa claro que ele não testou isso. Mas são situações que não atendem sua intenção, são alternativas para envio de impressão a fila da impressora.

Funçao ISPRINTER()

Enviado: 22 Fev 2016 09:31
por microvolution
bom dia Jairo!
Após o Szakats ter-nos respondido, indaguei novamente... aí outro respondeu o seguinte, que tentei traduzir pelo Translate/google e entendi que a HMG tem a solução. Estou correto? vejam:
Hi,
Please check out the following link in HMG:
http://www.hmgforum.com/viewtopic.php?f ... &start=160
Lookout for HMG_PrinterGetStatus()

- New HMG_PrinterGetStatus ( [ cPrinterName ] ) --> nStatusPrinter (contrib by BPD2000)
nStatusPrinter --> The value of this member can be zero or a combination of one or more of the following values.

PRINTER_STATUS_OK
PRINTER_STATUS_PAUSED
PRINTER_STATUS_ERROR
PRINTER_STATUS_PENDING_DELETION
PRINTER_STATUS_PAPER_JAM
PRINTER_STATUS_PAPER_OUT
PRINTER_STATUS_MANUAL_FEED
PRINTER_STATUS_PAPER_PROBLEM
PRINTER_STATUS_OFFLINE
PRINTER_STATUS_IO_ACTIVE
PRINTER_STATUS_BUSY
PRINTER_STATUS_PRINTING
PRINTER_STATUS_OUTPUT_BIN_FULL
PRINTER_STATUS_NOT_AVAILABLE
PRINTER_STATUS_WAITING
PRINTER_STATUS_PROCESSING
PRINTER_STATUS_INITIALIZING
PRINTER_STATUS_WARMING_UP
PRINTER_STATUS_TONER_LOW
PRINTER_STATUS_NO_TONER
PRINTER_STATUS_PAGE_PUNT
PRINTER_STATUS_USER_INTERVENTION
PRINTER_STATUS_OUT_OF_MEMORY
PRINTER_STATUS_DOOR_OPEN
PRINTER_STATUS_SERVER_UNKNOWN
PRINTER_STATUS_POWER_SAVE

Hope that helps.
Warm regards,

Jayadev
E aí, alguém entendeu alguma coisa?

Funçao ISPRINTER()

Enviado: 22 Fev 2016 10:35
por Kapiaba
W de Paula, conforme o Antonio Liñares, isto não tem solução, já que a API do rWindows, não funciona como no MS-Dos:

http://forums.fivetechsupport.com/viewt ... er#p161396

abs.

Funçao ISPRINTER()

Enviado: 22 Fev 2016 11:02
por asimoes
De Paula,

Faltou um end no seu Try..Catch..End

Sintaze:

Try

Catch

End

Funçao ISPRINTER()

Enviado: 22 Fev 2016 11:04
por Jairo Maia
Olá Pessoal,

Microvolution, apesar da confirmação do link postado pelo Kapiaba, o que você postou foram contribuições recentes do Dr Claudio Soto (aliás mais uma) para a HMG. Me chamou a atenção esse comando: PRINTER_STATUS_OFFLINE.

Como se trata de HMG, sugiro você postar essa dúvida na seção MiniGui desse fórum. Com certeza o Dr Soto responderá com mais conhecimento do que significa e como usar isso na HMG.

Funçao ISPRINTER()

Enviado: 22 Fev 2016 11:06
por rochinha
Amiguinhos,

Para o meu caso eu tiver de fazer umas andanças:

Código: Selecionar todos

...
  ? "GetPrintDefault()",GetPrintDefault(),"GetPrinter()",GetPrinter()
  do case
     case GetPrintDefault()=0 .and. empty( GetPrinter() )

          ? "Nenhuma impressora esta instalada."

     case GetPrintDefault()=0 .and. !empty( GetPrinter() )

          ? "Servico de Spool esta desativado ou nenhuma impressora como padrao."

     case GetPrintDefault()<>0

          //aPrinter := GetPrinters()
          //for i = 1 to len(aPrinter)
          //    cPrinter := aPrinter[i]
          //    cPort    := substr(cPrinter,at(",",cPrinter)+1,20)
          //    if MsgYesNO( "Colocar impressora " + cPrinter + " como padrao?" )
          //       //SetPrinter( substr(cPrinter,1,at(",",cPrinter)-1) )
          //       SetPrintDefault( substr(cPrinter,1,at(",",cPrinter)-1) )
          //       PrinterInit()
          //       //SetDefaultPrinter( substr(cPrinter,1,at(",",cPrinter)-1) )
          //    endif
          //next

  endcase
...
Desta forma evitei que minha aplicação desse pau por causa da falta da impressora.

O bloco desabilitado até me apresenta a lista de impressoras mas a função SetPrintDefault não funcionou.

Funçao ISPRINTER()

Enviado: 22 Fev 2016 11:09
por asimoes

Código: Selecionar todos

     do while lastkey () <> K_ESC
       try
          SET DEVICE TO PRINTER 
          SET PRINTER TO LPT1
          SET PRINT ON
       catch
          if .not. CONFIRMA3 ( 'A Impressora Matricial LPTx Está Pronta?' , 1 , 'SiCCA v3.6 - Verifique Sua Impressora Matricial (paralela)' ) == 1
             if .not. CONFIRMA3 ('Deseja Então Usar Outra Impressora ( USB, em Rede, etc) ',1,'SiCCA v3.6 - Impressoras Alternativas') == 1
                * Abandona o programa // acrescentada p/ parar erro na RIMPR000 na funtpo CONFIG_COMANDO (linha 300) 14/12/15w
                keyboard chr (K_ESC) // acrescentada p/ parar erro na RIMPR000 na funtpo CONFIG_COMANDO (linha 300) 14/12/15w
                inkey () // acrescentada p/ parar erro na RIMPR000 na funtpo CONFIG_COMANDO (linha 300) 14/12/15w
                lUSB := .f.
                return .f.
                exit // acrescentada p/ parar erro na RIMPR000 na funtpo CONFIG_COMANDO (linha 300) 14/12/15w
             else // acrescentada p/ parar erro na RIMPR000 na funtpo CONFIG_COMANDO (linha 300) 14/12/15w
                lUSB := .t.
                mUSBPRN := substr (dtos(date()),3,2) + substr (dtos(date()),5,2) + left (time(),2) + substr (time(),4,2) + right (time(),2)
                exit
             endif
          endif
       End
    enddo

Funçao ISPRINTER()

Enviado: 22 Fev 2016 11:19
por Kapiaba
W. de Paula, usando assim, não funciona, se a impressora estiver desligada, ele diz que não existe impressora... Teste.

Código: Selecionar todos

#DEFINE PRINTER_STATUS_OK           0
#DEFINE PRINTER_STATUS_PAUSED            1
#DEFINE PRINTER_STATUS_ERROR             2
#DEFINE PRINTER_STATUS_PENDING_DELETION  4
#DEFINE PRINTER_STATUS_PAPER_JAM         8
#DEFINE PRINTER_STATUS_PAPER_OUT         16
#DEFINE PRINTER_STATUS_MANUAL_FEED       32
#DEFINE PRINTER_STATUS_PAPER_PROBLEM     64
#DEFINE PRINTER_STATUS_OFFLINE           128
#DEFINE PRINTER_STATUS_IO_ACTIVE         256
#DEFINE PRINTER_STATUS_BUSY              512
#DEFINE PRINTER_STATUS_PRINTING          1024
#DEFINE PRINTER_STATUS_OUTPUT_BIN_FULL   2048
#DEFINE PRINTER_STATUS_NOT_AVAILABLE     4096
#DEFINE PRINTER_STATUS_WAITING           8192
#DEFINE PRINTER_STATUS_PROCESSING        16384
#DEFINE PRINTER_STATUS_INITIALIZING      32768
#DEFINE PRINTER_STATUS_WARMING_UP        65536
#DEFINE PRINTER_STATUS_TONER_LOW         131072
#DEFINE PRINTER_STATUS_NO_TONER          262144
#DEFINE PRINTER_STATUS_PAGE_PUNT         524288
#DEFINE PRINTER_STATUS_USER_INTERVENTION 1048576
#DEFINE PRINTER_STATUS_OUT_OF_MEMORY     2097152
#DEFINE PRINTER_STATUS_DOOR_OPEN         4194304
#DEFINE PRINTER_STATUS_SERVER_UNKNOWN    8388608
#DEFINE PRINTER_STATUS_POWER_SAVE        16777216

/*
MsgRun( isprint( "LPT1" ), "Status da Impressora", {|| SysWait(3) } )

//ou

if InPrint( "LPT1" ) = "Impressora Sem Papel"
    ? "Va colocar papel na impressora!"
endif

ou

    EXTERNAL ISPRINTER

    IF .NOT. ISPRINTER()
       // mensagem
       Return Nil
    ENDIF
*/

FUNCTION IsPrint( QuePrinter )

   LOCAL nStatus

   DEFAULT QuePrinter := "LPT1:"

   nStatus := PrnStatus( QuePrinter )

   IF     nStatus <        1 ; RETURN "Impressora 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 Off Line"
   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 Memória Lotada"
   ELSEIF nStatus =     4096 ; RETURN "Impressora Não Instalada/Ligada"
   ELSEIF nStatus =     8192 ; RETURN "Impressora Aguardando"
   ELSEIF nStatus =    16384 ; RETURN "Impressora Processando"
   ELSEIF nStatus =    32768 ; RETURN "Impressora Inicializando"
   ELSEIF nStatus =    65536 ; RETURN "Impressora em Atenção"
   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 Intervenção do Usuário"
   ELSEIF nStatus =  2097152 ; RETURN "Impressora Sem Memória"
   ELSEIF nStatus =  4194304 ; RETURN "Impressora Tampa Aberta"
   ELSEIF nStatus =  8388608 ; RETURN "Impressora Servidor Desconhecido"
   ELSEIF nStatus = 16777217 ; RETURN "Impressora POWER_SAVE"
   ENDIF

RETURN NIL

// -> FIM DO PROGRAMA

Funçao ISPRINTER()

Enviado: 22 Fev 2016 12:33
por asimoes
Tem alguém com o horário verão, as mensagens estão vindo com atraso de 1h

Funçao ISPRINTER()

Enviado: 22 Fev 2016 12:45
por Toledo
asimoes escreveu:as mensagens estão vindo com atraso de 1h
Alexandre, entre no Painel de Controle do Usuário e desative em Preferências do fórum o horário de verão.

Abraços,