DICA: Tratamento do SPOOLER, desligar, ligar e limpar

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

DICA: Tratamento do SPOOLER, desligar, ligar e limpar

Mensagem por rochinha »

Amiguinhos,

Código: Selecionar todos

/*
 * Objetivo: Reiniciar serviço de spool caso esteja com impressões travadas ou limpar de arquivos não impressos
 * data: 26/04/2017
 * José Carlos da Rocha
 */

#include "FiveWin.ch" // Chamada pode ser excluida caso não use com Fivewin

*
* ----------------------------------------------------------------
*
FUNCTION main( limpaSpool )
   LOCAL oSpooler

   LOCAL strService := "SPOOLER"
   LOCAL cSpoolPath := getEnvironmentString( "WINDIR" ) + "\SYSTEM32\SPOOL\PRINTERS"

   DEFAULT limpaSpool := "N"

   oSpooler := TOleAuto():New( "Wscript.Shell" )

   oSpooler:run( "net stop " + strService )

   if limpaSpool = "S"
      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
   else
      SysWait( 10 ) // Função especifica para Fivewin, mas pode ser colocado qualquer contador para atrazar a continuidade
   endif

   oSpooler:run( "net start " + strService )

   oSpooler:End()

   RETURN NIL

function getComputerName()
   LOCAL reg
   oNetwork := TOleAuto():New("wscript.Network")
   return oNetwork:ComputerName()

function getEnvironmentString( _string_ )
   LOCAL reg
   oWSHShell := TOleAuto():New("wscript.Shell")
   return oWSHShell:ExpandEnvironmentStrings( "%" + _string_ + "%" )
A rotina em questão é mão-na-roda para liberar o spool de toda lambança de impressão que às vezes se perde do foco do serviço. Sabe aquela impressão que você manda, mas não sai? pois é, o arquivo de trabalho fica perdido dentro da pasta mas não é visualizado para exclusão na tela do spooler mas o serviço fica tentando enviá-lo e portanto não passa para o próximo até que consiga, o que acaba não acontecendo.

Para os que adoram eliminar gordurinhas no código, podem usar Directory() e Aeval() para melhorar o trecho dentro de if limpaspool...endif

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

DICA: Tratamento do SPOOLER, desligar, ligar e limpar

Mensagem por rochinha »

Amiguinhos,

Eis um exemplo de uso:

Código: Selecionar todos

/*
 * Objetivo: Reiniciar serviço de spool caso esteja com impressões travadas ou limpar de arquivos não impressos
 * data: 26/04/2017
 * versao: 2017-0429
 * José Carlos da Rocha
 */

#include "FiveWin.ch"

*
* ----------------------------------------------------------------
*
function Main()
   local oBar
   // Pega o caminho do aplicativo
   cPath     := cFilePath( GetModuleFileName( GetInstance() ) )
   // Pega nome da maquina
   cNetName  := getComputerName()
   //
   DEFINE WINDOW oWnd TITLE alltrim( cNetName ) + " - Manutenção de Fila de Impressão"
          DEFINE BUTTONBAR oBar OF oWnd _3D
          DEFINE BUTTON OF oBar ACTION fSpooler( 1 ) TOOLTIP "Desliga Spooler"
          DEFINE BUTTON OF oBar ACTION fSpooler( 2 ) TOOLTIP "Liga Spooler"
          DEFINE BUTTON OF oBar ACTION fSpooler( 3 ) TOOLTIP "Limpa Fila de Impressao" GROUP
          SET MESSAGE OF oWnd TO "" CLOCK DATE
   ACTIVATE WINDOW oWnd
   //
   return nil

*
* ----------------------------------------------------------------
*
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

function getComputerName()
   LOCAL reg
   oNetwork := TOleAuto():New("wscript.Network")
   return oNetwork:ComputerName()

function getEnvironmentString( _string_ )
   LOCAL reg
   oWSHShell := TOleAuto():New("wscript.Shell")
   return oWSHShell:ExpandEnvironmentStrings( "%" + _string_ + "%" )
Anexos
olespool.zip
tratamento do serviço de spool
(570.89 KiB) Baixado 80 vezes
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

DICA: Tratamento do SPOOLER, desligar, ligar e limpar

Mensagem por asimoes »

Muito útil Rochinha, obrigado!
►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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

DICA: Tratamento do SPOOLER, desligar, ligar e limpar

Mensagem por rochinha »

Amiguinhos,

asimoes
Valeu queridão. No caminho encontramos pedras, não dá pra passar por cima e deixar para o parceiro que vem depois, é preciso retirá-las para que o caminho fique mais suave.

Hoje eu acordei Platônico.
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
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

DICA: Tratamento do SPOOLER, desligar, ligar e limpar

Mensagem por rubens »

:{
"Eu e minha casa servimos ao Senhor e você ???"
Responder