O QUE FAZER
PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Moderador: Moderadores
-
claudioplus
- Usuário Nível 1

- Mensagens: 13
- Registrado em: 06 Mai 2005 13:03
É brincadeira, já tentei dessa forma e não da nenhuma diferenca já tentei tambem LPT1: ao inves de LPT1, e a coisa não muda, estou a tres dias tentando, e pelo que vejo a coisa tá feita, detalhe até com a funcao PRINTFILERAW nao me retorna resultado nenhum.
O QUE FAZER
???????? estou convertendo um sistema inteiro corporativo, e nao posso voltar atras.
O QUE FAZER
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Claudio, aqui funciona, eu utilizo o xharbour 1.0.0 free, inclusive uso tmb. PRINTFILERAW() sem problemas.
Olhe os Retorno da PRINTFILERAW()
Olhe os Retorno da PRINTFILERAW()
Código: Selecionar todos
nResult := PrintFileRaw( cPrinter, cFile, "Teste de Impressão" )
SWITCH nResult
CASE -1
cMsg += "Invalid parameters passed to function" ; EXIT
CASE -2
cMsg += "WinAPI OpenPrinter() call failed" ; EXIT
CASE -3
cMsg += "WinAPI StartDocPrinter() call failed" ; EXIT
CASE -4
cMsg += "WinAPI StartPagePrinter() call failed" ; EXIT
CASE -5
cMsg += "WinAPI malloc() of memory failed" ; EXIT
CASE -6
cMsg += "File " + cFile + " not found" ; EXIT
DEFAULT
cMsg += cFile + " PRINTED OK!!!"
END
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
claudioplus
- Usuário Nível 1

- Mensagens: 13
- Registrado em: 06 Mai 2005 13:03
Olha só o Help da funçao PrintReady(): Usa número como parâmetro, retorna sempre .F. (vai entender isso...) e só existe para compatibilidade(???). O recomendado é IsPrinter() (?????). Entendi direito?
Código: Selecionar todos
PrintReady()
Tests if a printer connected to a specified port is ready.
Syntax
PrintReady( [<nLPT>] ) --> lPrinterIsReady
Arguments
<nLPT>
This is a numeric value specifying the printer port to check. It defaults to 1.
Return
The function exists for compatibility reasons. It returns always .F. (false). Use IsPrinter() to test the availability of a printer.
Começou o code certo. Mas fechou errado. O certo é fechar com [/code].
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
O problema q a ferramenta existe (PrintReady ou PrintStat) mas parece q n funciona ou pelo menos funciona precariamente, pra mim tb sempre retorna 0 ou seja diz q estah desconectada, isso usando LPT1, LPT2, LPT3.
Marcos Roberto
Marcos Roberto
Marcos Roberto
NetService Software
NetService Software
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Olá Marcos,
Veja o que diz o HELP do xharbour:
[inglês]
The function exists for compatibility reasons. It returns always .F. (false). Use IsPrinter() to test the availability of a printer.
[português]
A função existe por razões de compatibilidade. Ele sempre retorna. f. (FALSO). Use IsPrinter() para testar a disponibilidade de uma impressora.
Veja o que diz o HELP do xharbour:
[inglês]
The function exists for compatibility reasons. It returns always .F. (false). Use IsPrinter() to test the availability of a printer.
[português]
A função existe por razões de compatibilidade. Ele sempre retorna. f. (FALSO). Use IsPrinter() para testar a disponibilidade de uma impressora.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Correto mas o ISPRINTER soh testa impressoras conectadas fisicamente, ou seja, LPT1 e o caso eh verificar impressoras LPT1, LPT2 E ETC.
Assim mantenho o meu usuario informado sobre a atual situacao/status da impressora evitando uma ligacao desnecessaria. Concorda?
Marcos Roberto
Assim mantenho o meu usuario informado sobre a atual situacao/status da impressora evitando uma ligacao desnecessaria. Concorda?
Marcos Roberto
Marcos Roberto
NetService Software
NetService Software
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Marcos,
o que você esta usando para Imprimir ?
Lhe pergunto por que alguma coisa tem como prever, veja como eu uso:
o que você esta usando para Imprimir ?
Lhe pergunto por que alguma coisa tem como prever, veja como eu uso:
Código: Selecionar todos
*****************
Function CHAMAIMP
*****************
LOCAL cPrinterName, cPrinterPort
LOCAL aPrn := GetPrinters(.t.,.f.)
PARA TAM,cARQ // S=136 N=79
LOCAL nResult := -1
LOCAL cMsg
IF TAM=Nil
TAM="S"
ENDIF
If Empty(aPrn)
IF MsgYesNo("ATENÇÃO !!! Não foi possivel localizar Nenhuma impressora Instalada no Windows, Deseja Instalar uma Agora ?","Aviso do Sistema")
RunApplet_imp( "AddPrinter" )
Endif
Return
EndIf
IF !EMPTY(cARQ)
cFILE := cARQ
ELSE
MsgInfo("Não foi possivel Gerar arquivo de impressão, Tente Novamente...","Aviso do Sistema")
Return
ENDIF
nPrn:=PrintSetup( @cPrinterName )
for i=1 to len(aPrn)
IF aPrn[i,1] = cPrinterName
cPrinterPort = aPrn[i,2]
exit
ENDIF
next
IF cPrinterPort#Nil
IF LEFT(UPPER(cPrinterPort),3)="LPT" // se for Matricial, Imprime pela PrintFileRaw()
nResult := PrintFileRaw( cPrinterName, cFile, "Impressao Pelo Sistema" )
IF nResult = -1
cMsg = "Parametros Invalido, Favor Tentar Novamente"
ELSEIF nResult = -2
cMsg = "Falha na chamada da Impressora, Favor Vereficar a Impressora"
ELSEIF nResult = -3
cMsg = "Falha ao Iniciar Impressão, Favor Vereficar a Impressora"
ELSEIF nResult = -4
cMsg = "Falha ao Iniciar a Primeira Pagina, Favor Vereficar a Impressora"
ELSEIF nResult = -5
cMsg = "Falha de Memoria da Impressora, Favor Vereficar a Impressora"
ELSEIF nResult = -6
cMsg = "Não foi Possivel localizar o arquivo de Impressão, Favor Tentar Novamente"
ENDIF
IF cMsg#Nil
MsgInfo(cMsg,"Aviso do Sistema")
Return
ENDIF
ELSE
IF TAM="S"
IF !EMPTY(nPrn)
Imprime(cFILE,136,cPrinterName)
ENDIF
ELSE
IF !EMPTY(nPrn)
Imprime(cFILE,80,cPrinterName)
ENDIF
ENDIF
ENDIF
ENDIF
RETURN NIL
FUNCTION RunApplet_imp( cApplet ) //CONFIGURA IMPRESSORA NO WINDOWS
ShellExecute("rundll32.exe","open","shell32.dll, SHHelpShortcuts_RunDLL "+cApplet,"2")
RETURN Nil
******************************************
Function Imprime( cArq, tamrel ,cPrinter )
******************************************
local cTexto, nLinhas, nA, cLinha
local oPrinter := win32prn():New(cPrinter)
oPrinter:Landscape := .F.
oPrinter:FormType := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies := 1
GERAFILE()
vARQ:={}
aadd( vARQ, {"LINHA","C",200,0} )
DBcreate(cFILE, vARQ,"DBFCDX")
SELE 40
USE (cFILE) new shar VIA "DBFCDX"
append from (cArq) sdf && nome completo do arquivo sdf
oPrinter:Create()
IF !oPrinter:Create()
MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.","Aviso do Sistema")
return NIL
ELSE
IF !oPrinter:StartDoc("Impressao Pelo Sistema")
MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora","Aviso do Sistema")
Return NIL
endif
IF FILE("res\logo.bmp") // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
PrintBitMap( oPrinter )
aTamlog := 9
else
aTamlog := 0
endif
FOR TT=1 TO aTamlog
oPrinter:newline()
NEXT
IF TAMREL=80
oPrinter:setfont('Courier New',,12,,,,255) // Normal
ELSE
oPrinter:SetFont("Courier New",11,{3,-50}) // Comprimida
ENDIF
oPrinter:Bold(0) // Normal
dbgotop()
Do while !eof()
cLinha := Linha // Busca linha de impressao
oPrinter:newline() // Inicia nova linha
oPrinter:TextOut(HB_OemToAnsi(cLinha))
oPrinter:Bold(0) // Normal
dbskip()
if !eof()
if (oPrinter:MaxRow() - 2) <= oPrinter:Prow()
oPrinter:NewPage()
IF FILE("res\logo.bmp")
PrintBitMap( oPrinter )
aTamlog := 9
else
aTamlog := 0
endif
FOR TT=1 TO aTamlog
oPrinter:newline()
NEXT
endif
endif
enddo
oPrinter:EndDoc()
oPrinter:Destroy()
ENDIF
USE
RETURN NIL
***************************
Function PrintBitMap( oPrn ) //função para imprimir imagem do logotipo
***************************
LOCAL oBMP
oBMP:= Win32BMP():new()
oBmp:loadFile( "res\logo.bmp" )
oBmp:Draw( oPrn, { 200,200,500,500 } )
oBMP:Destroy()
RETURN
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Só lembrando que toda essa verificação, por mais que funcione, é muito vaga, e se alguém sem querer chutou a caixa de papel ?
Lembram da técnica do grito ? E aquela da câmera monitorando a impressora ?
Lembram da técnica do grito ? E aquela da câmera monitorando a impressora ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Exatamente, nem tudo tem como Prever, mas algumas coisas sim.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Caros, exitem pelo menos pra mim varias ligacoes durante o dia ou mesmo atendimentos q poderiam n acontecer c algumas ferramentas em forma de avisos ou mesmo solucionando o caso do cliente feitas no sistema funcionassem, o exemplo disso eh uma certa impressora matricial de pedido, por acaso alguem ligou a maquina q estah instalado a impressora depois q foram ligados os outros micros, c o sistema verifica-se de tempo em tempo (e eh isso q estou tentando fazer) a conexao da impressora e fizesse a correcao (atraves de comandos net use lptx) eu pelo menos n teria aquela ligacao q muitas vezes me tira d algo mais importante, isso eu acredito q ocorre comigo e muitos outros colegas, comigo incluse acontece com muita frequencia o cliente me ligar pq sua senha n estah sendo digitada, eu entaum pergunto: "Sua senha eh numerica?" e sempre ouço do outro lado "sim", entaum eu peço para q liguem a tecla NUMLOCK. Ateh isso eu quero deixar para q meu sistema trate. Como tem no windows XP q avisa q a o CapsLock estah ativado, entaum eu sei q n vai resolver o problemas mas tenho certeza q nao havera mais algumas dessas ligacoes desnecessarias.
Marcos Roberto
Marcos Roberto
Marcos Roberto
NetService Software
NetService Software
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: PRINTREADY,PRINTSEND,... Testar Impressora On/Off Line
Amiguinhos
Isto também funcionará?
Como nunca usei estes recursos, pretendo usar.
Isto também funcionará?
Código: Selecionar todos
wSt1 := PRINTstat("\\servidor\ImpressoraXYZ")
wSt2 := PRINTREADY("\\servidor\ImpressoraXYZ")
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
