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