Impressora on-line / off-line
Moderador: Moderadores
- alejesus
- Usuário Nível 1

- Mensagens: 15
- Registrado em: 09 Jun 2010 20:58
- Localização: Osasco - SP
- Contato:
Impressora on-line / off-line
Boa tarde pessoal.
Alguém tem ideia de como poderia colocar a impressora on-line e/ou off-line via linha de comando no Windows?
Obrigado,
Alguém tem ideia de como poderia colocar a impressora on-line e/ou off-line via linha de comando no Windows?
Obrigado,
Impressora on-line / off-line
Questão intrigante esta visto que o windows gerencia isto perfeitamente. Uma vez a impressora instalada e não havendo resposta da mesma em dado momento o windows a coloca como off-line e vice versa.
Impressora on-line / off-line
Qual é a finalidade disso ?alejesus escreveu:Alguém tem ideia de como poderia colocar a impressora on-line e/ou off-line via linha de comando no Windows?
►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)
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)
- alejesus
- Usuário Nível 1

- Mensagens: 15
- Registrado em: 09 Jun 2010 20:58
- Localização: Osasco - SP
- Contato:
Impressora on-line / off-line
Bom dia.
Shark / Asimoes, a situação que estou encontrando é que o Windows coloca a impressora off-line e depois disto só com boot pra voltar a funcionar.
No caso a pessoa que opera o sistema, como na maioria das vezes, é leigo e para evitar suporte estava pensando em fazer o comando de impressora on-line para garantir que a mesma não esteja off-line por qualquer razão, segurando as impressões até que alguém vá lá e coloque a mesma on-line.
Veja a situação que já consegui mapear:
- O operador liga o computador
- Após tudo funcionando, ele percebe que a impressora ficou desligada, então liga
- No Windows a impressora está off-line (Usar impressora off-line)
- Todas as impressões ficam paradas na impressora até que se coloque a mesma on-line manualmente, sendo que algumas vezes só reiniciando pra que a impressão seja reiniciada.
Obrigado pela atenção, vamos ver se consigo alguma orientação com este problema.
Shark / Asimoes, a situação que estou encontrando é que o Windows coloca a impressora off-line e depois disto só com boot pra voltar a funcionar.
No caso a pessoa que opera o sistema, como na maioria das vezes, é leigo e para evitar suporte estava pensando em fazer o comando de impressora on-line para garantir que a mesma não esteja off-line por qualquer razão, segurando as impressões até que alguém vá lá e coloque a mesma on-line.
Veja a situação que já consegui mapear:
- O operador liga o computador
- Após tudo funcionando, ele percebe que a impressora ficou desligada, então liga
- No Windows a impressora está off-line (Usar impressora off-line)
- Todas as impressões ficam paradas na impressora até que se coloque a mesma on-line manualmente, sendo que algumas vezes só reiniciando pra que a impressão seja reiniciada.
Obrigado pela atenção, vamos ver se consigo alguma orientação com este problema.
Impressora on-line / off-line
Creio que até já tenha feito isso, tentou reinstalar o driver da impressora ?
Existe outra impressora do mesmo modelo ?
O driver que instalou é o do fabricante ou é um desses genéricos (oem) ?
Existe outra impressora do mesmo modelo ?
O driver que instalou é o do fabricante ou é um desses genéricos (oem) ?
►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)
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

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Impressora on-line / off-line
veja se ajuda:
Código: Selecionar todos
REDEFINE BUTTON oStatusImp ID 302 OF oDlgCCe ;
ACTION ( STATUS_DA_IMPRESSORA() )
oStatusImp:cToolTip := OemToAnsi( "Verifique o Status da(s) Sua(s) Impressora(s) Inclusive Virtual" )
Function STATUS_DA_IMPRESSORA()
aArray := GetPrinters( .T. )
If Empty( aArray )
Alert( "Nenhuma impressora Instalada", "Atencao" )
Return Nil
Endif
for i = 1 to len(aArray)
cPrinterName := substr( aArray[i], 1, at( ",", aArray[i])-1 )
//? "A impressora " + cPrinterName, IsPrint( alltrim( cPrinterName ) )
MsgInfo( ( "A Impressora " + cPrinterName )+CRLF+ ;
+CRLF+ ;
IsPrint( alltrim( cPrinterName ) ), ;
OemToAnsi( "Aten‡Æo Usu rio" ) )
next
Return nil
Function GetPrinters()
Local aPrinter := {}
Local cAllEntries
Local cEntry
Local nStart
Local cName
Local cPrn
Local cPort
Local nJ
cAllEntries := STRTRAN( GetProfString( "Devices" ), Chr( 0 ), CRLF )
For nStart := 1 To MlCount( cAllEntries )
cName := MemoLine( cAllEntries,,nStart)
cEntry := GetProfString( "Devices",cName,"")
nJ := 2
Do While ! Empty(cPort := StrToken(cEntry,nJ++,","))
Aadd(aPrinter,Trim(cName)+" , "+Trim(cPort))
EndDo
Next
Return(aPrinter)
function IsPrint( QuePrinter )
LOCAL nStatus
DEFAULT QuePrinter := "LPT1:"
nStatus := PrnStatus( QuePrinter )
if nStatus < 1 ; return "Impressora Esta Funcionando 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 Bandeija"
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(Desligada)"
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 Memoria Lotada"
elseif nStatus = 4096 ; return "Impressora Nao Instalada"
elseif nStatus = 8192 ; return "Impressora Aguardando"
elseif nStatus = 16384 ; return "Impressora Processando"
elseif nStatus = 32768 ; return "Impressora Inicializando"
elseif nStatus = 65536 ; return "Impressora em Atencao"
elseif nStatus = 131072 ; return "Impressora Toner Baixo"
elseif nStatus = 262144 ; return "Impressora Sem Toner"
elseif nStatus = 524288 ; return "Impressora PAGE_PUNT(Ineficinte)"
elseif nStatus = 1048576 ; return "Impressora Intervencao do Usuario"
elseif nStatus = 2097152 ; return "Impressora Sem Memoria"
elseif nStatus = 4194304 ; return "Impressora Tampa Aberta"
elseif nStatus = 8388608 ; return "Impressora Servidor Desconhecido"
elseif nStatus = 16777217 ; return "Impressora POWER_SAVE(Poupando Energia)"
endif
RETURN ( nStatus )
Impressora on-line / off-line
Fiz uma leitura melhor do que foi pedido:
How To Modify Printer Settings by Using SetPrinter
No link abaixo tem a informação para Resetar a impressora ou modificar o status dela.
https://support.microsoft.com/en-us/hel ... setprinter
Procurei na MiniGui existe a função EF_RESETPRINTER no fonte winprint.prg teria que isolar o código para somente chamar a função EF_RESETPRINTER que modifica o status da impressora.
How To Modify Printer Settings by Using SetPrinter
No link abaixo tem a informação para Resetar a impressora ou modificar o status dela.
https://support.microsoft.com/en-us/hel ... setprinter
Procurei na MiniGui existe a função EF_RESETPRINTER no fonte winprint.prg teria que isolar o código para somente chamar a função EF_RESETPRINTER que modifica o status da impressora.
►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)
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)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Impressora on-line / off-line
Amiguinhos,
Ao invés de manusear uma impressora específica o melhor é manusear o spooler.
Vejamos como esta no meu sistema:
Vejamos o que a fução chamada faz:
A função SysWait() é somente um pause cronometrado.
Mais um trecho importante:
Ao invés de manusear uma impressora específica o melhor é manusear o spooler.
Vejamos como esta no meu sistema:
Código: Selecionar todos
local oMenu
MENU oMenu POPUP
MENUITEM "Configura Impressora" ACTION PrinterSetup()
SEPARATOR
MENUITEM "Configura Spooler"
MENU
MENUITEM "Desliga Spooler" ACTION fSpooler( 1 )
MENUITEM "Liga Spooler" ACTION fSpooler( 2 )
MENUITEM "Limpa Fila de Impressao" ACTION fSpooler( 3 )
ENDMENU
SEPARATOR
Código: Selecionar todos
/*
* Função de manutenção do serviço de spooler de impressoras
*/
FUNCTION fSpooler( opcao, limpaSpool )
LOCAL oSpooler, nInvisivel := 7
LOCAL strService := "SPOOLER"
LOCAL cSpoolPath := getEnvironmentString( "WINDIR" ) + "\SYSTEM32\SPOOL\PRINTERS"
DEFAULT limpaSpool := "N"
DEFAULT opcao := 2
// Cria objeto oSpooler
oSpooler := TOleAuto():New( "Wscript.Shell" )
// Se escolha foi Desligar
do case
case opcao = 1
// Desliga serviço
//oWnd:SetText( "Desligando o serviço de Spool..." )
SysWait( 5 )
oSpooler:run( "net stop " + strService, nInvisivel )
//oWnd:SetText( "Serviço de spool desligado..." )
SysWait( 5 )
//
case opcao = 2
// Liga serviço
//oWnd:SetText( "re-ligando o serviço de Spool..." )
SysWait( 5 )
oSpooler:run( "net start " + strService, nInvisivel )
//oWnd:SetText( "Serviço de spool re-ligado..." )
SysWait( 5 )
//
case opcao = 3
// Desliga serviço
//oWnd:SetText( "Desligando o serviço de Spool..." )
SysWait( 5 )
oSpooler:run( "net stop " + strService, nInvisivel )
// Processa limpeza da fila de impressões
//oWnd:SetText( "Processando limpeza no spool..." )
SysWait( 5 )
nContador := adir( cSpoolPath + "\*.*" )
if nContador != 0
DECLARE TXT_NOMES[ nContador ]
adir( cSpoolPath + "\*.*", TXT_NOMES )
for nContador = 1 TO LEN( TXT_NOMES )
fErase( cSpoolPath + "\" + TXT_NOMES[ nContador ] )
next
endif
// Se quiser esperar algum tempo basta configurar
SysWait( 5 )
// reLiga serviço
//oWnd:SetText( "re-ligando o serviço de Spool..." )
SysWait( 5 )
oSpooler:run( "net start " + strService, nInvisivel )
//oWnd:SetText( "Serviço de spool ligado..." )
SysWait( 5 )
//
endcase
// Elimina objeto oSpooler
oSpooler:End()
RETURN NIL
Mais um trecho importante:
Código: Selecionar todos
// Verificacao de existencia de impressora instalada e/ou configurada
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
// Bloco que perfaz uma busca das impressoras instalados no sistema
//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) )
// // PrinterPortToName( substr(cPrinter,1,at(",",cPrinter)-1) ) // ( "USB002" )
// PrinterInit()
// //SetDefaultPrinter( substr(cPrinter,1,at(",",cPrinter)-1) )
// endif
//next
endcase
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.
Impressora on-line / off-line
Não tenho como testar essa função porque todas as impressoras daqui estão em rede são gerenciadas pela novell.
A função SetPrinter é que vai mudar o status da impressora de disable para enable, eu não sei isso tem haver com offline/online só fazendo testes.
A função SetPrinter é que vai mudar o status da impressora de disable para enable, eu não sei isso tem haver com offline/online só fazendo testes.
Código: Selecionar todos
bOk := ResetPrinter()
#pragma BEGINDUMP
#include "hbapiitm.h"
#include <olectl.h>
#include <commctrl.h>
static PRINTER_INFO_2 * pi22 = NULL; // to restore printer dev mode after print.
static HANDLE hPrinter = NULL;
HB_FUNC( RESETPRINTER )
{
BOOL bFlag;
bFlag = SetPrinter(hPrinter, 0, (byte*)0, PRINTER_CONTROL_SET_STATUS) ;
if ( bFlag )
hb_retl( 0 );
else
hb_retl( 1 );
}
#pragma ENDDUMP
►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)
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)
Impressora on-line / off-line
Quando eu chegar em casa terei como testar nas minhas impressoras.
►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)
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)
- alejesus
- Usuário Nível 1

- Mensagens: 15
- Registrado em: 09 Jun 2010 20:58
- Localização: Osasco - SP
- Contato:
Impressora on-line / off-line
Boa tarde pessoal.
Agradeço a todos as informações, vou analisar e testar tudo que foi informado e retorno com mais detalhes.
Um abraço!
Agradeço a todos as informações, vou analisar e testar tudo que foi informado e retorno com mais detalhes.
Um abraço!
Impressora on-line / off-line
Rochinha perguntas:
usando net start spooler se a impressora estiver offline que é o problema do colega ela mudará o status para online ?
usando net start spooler se a impressora estiver offline que é o problema do colega ela mudará o status para online ?
►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)
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)
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Impressora on-line / off-line
Amiguinhos,
O Spooler é a ponte entre o S.O. e o hardware. Para a impressora ficar ligada para o usuário mas off-line para o S.O. deveriamos acionar comandos fisicos nela ou comandar operações via gerenciadores.
Quando desligamos o Spooler tornamos a impressora invisivel ao S.O. portanto ele pensa que ela está off-line ou desligada.
Às vezes impressões ficam enroscadas no spool e mesmo deletando tem sempre um que não sai nem com reza-braba. Ai temos de falar para o usuário: "Desliga e liga a impressora".
Aí a mesma está em outra sala, outro andar e fica ruim.
Para excluir os .SPLs gerados no spool diretamente sem desligar o spooler não dá, alguns arquivos ficam preso com quesito de em uso.
Então, desligando o spooler, os arquivos em cache da mesma desaparecem, o spool fica livre para eliminação e a impressora "desligada".
O comando start/stop spooler somente baixa/levanta a ponte mas não diz o estado da impressora.
Testar o spooler evita erros de falta de impressoras instaladas. Ao ligá-lo teremos visão das mesmas e podemos testar seus status.
Por isto coloquei um trecho de testes.
Alguns testes de verificação de impressoras pode nos iludir ao mostrar que as impressoras estão off-line, quando na verdade o spooler é que está parado.
O spooler ativo nos devolve a lista de impressoras quando ligado. Se desligado não devolve nada podendo assim desta forma colocar critica para erro de envio de comando para impressora que não existe ou não está ativa.
Sem o spooler, não temos lista de impressoras, sem impressoras não podemos enviar comandos SET Printer para ativa-las ou desativar ou ver seu estado.
Portanto, tudo depende.
Ou, em resposta a sua pergunta eu podeira simplesmente dizer, NÃO
Vejamos impressora ligada não é o mesmo que on-line e vice-versa. Só pra tentar explicar o que acontece.Rochinha perguntas:
usando net start spooler se a impressora estiver offline que é o problema do colega ela mudará o status para online ?
O Spooler é a ponte entre o S.O. e o hardware. Para a impressora ficar ligada para o usuário mas off-line para o S.O. deveriamos acionar comandos fisicos nela ou comandar operações via gerenciadores.
Quando desligamos o Spooler tornamos a impressora invisivel ao S.O. portanto ele pensa que ela está off-line ou desligada.
Às vezes impressões ficam enroscadas no spool e mesmo deletando tem sempre um que não sai nem com reza-braba. Ai temos de falar para o usuário: "Desliga e liga a impressora".
Aí a mesma está em outra sala, outro andar e fica ruim.
Para excluir os .SPLs gerados no spool diretamente sem desligar o spooler não dá, alguns arquivos ficam preso com quesito de em uso.
Então, desligando o spooler, os arquivos em cache da mesma desaparecem, o spool fica livre para eliminação e a impressora "desligada".
O comando start/stop spooler somente baixa/levanta a ponte mas não diz o estado da impressora.
Testar o spooler evita erros de falta de impressoras instaladas. Ao ligá-lo teremos visão das mesmas e podemos testar seus status.
Por isto coloquei um trecho de testes.
Alguns testes de verificação de impressoras pode nos iludir ao mostrar que as impressoras estão off-line, quando na verdade o spooler é que está parado.
O spooler ativo nos devolve a lista de impressoras quando ligado. Se desligado não devolve nada podendo assim desta forma colocar critica para erro de envio de comando para impressora que não existe ou não está ativa.
Sem o spooler, não temos lista de impressoras, sem impressoras não podemos enviar comandos SET Printer para ativa-las ou desativar ou ver seu estado.
Portanto, tudo depende.
Ou, em resposta a sua pergunta eu podeira simplesmente dizer, NÃO
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.