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,

Moderador: Moderadores
alejesus escreveu:Alguém tem ideia de como poderia colocar a impressora on-line e/ou off-line via linha de comando no Windows?
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 )
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
/*
* 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
// 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
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
Rochinha perguntas:
usando net start spooler se a impressora estiver offline que é o problema do colega ela mudará o status para online ?
Usuários vendo este fórum: Google [Bot] e 7 visitantes