Funçao ISPRINTER()

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:

Funçao ISPRINTER()

Mensagem 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...
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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Funçao ISPRINTER()

Mensagem 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
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:

Funçao ISPRINTER()

Mensagem 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?
:%
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:

Funçao ISPRINTER()

Mensagem 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!
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:

Funçao ISPRINTER()

Mensagem 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?
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

Funçao ISPRINTER()

Mensagem 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.
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)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Funçao ISPRINTER()

Mensagem 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?
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!
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Funçao ISPRINTER()

Mensagem 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.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Funçao ISPRINTER()

Mensagem por asimoes »

De Paula,

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

Sintaze:

Try

Catch

End
►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
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funçao ISPRINTER()

Mensagem 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.
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:

Funçao ISPRINTER()

Mensagem 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.
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.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Funçao ISPRINTER()

Mensagem 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
►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)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Funçao ISPRINTER()

Mensagem 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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Funçao ISPRINTER()

Mensagem por asimoes »

Tem alguém com o horário verão, as mensagens estão vindo com atraso de 1h
►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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Funçao ISPRINTER()

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder