Заметил общий глюк принтеров HP LaserJet, связанный скорей всего в ошибках драйверов. Глюк следующий: при постановке в печать документов иногда происходит зависание службы печати. Просто отключение и включение принтера, очистка очереди печати и прочие манипуляции не помогают, единственное это перезагрузка ПК. Однако еще можно остановить службу печати, очистить очередь печати и заново ее запустить, тогда принтер оживает и начинает нормально функционировать. Чтобы не лазить постоянно в службы и не лезть в папку Windows для очистки очереди я использую следующий cmd-файл:
@net stop spooler @del %WINDIR%\SYSTEM32\spool\Printers\*.* /q @net start spooler
Или VBS-скрипт:
Option Explicit Dim objFSO Dim strComputer Dim objWMIService Dim colServiceList, objService, errReturn strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colServiceList = objWMIService.ExecQuery("Associators of " _ & "{Win32_Service.Name='Spooler'} Where " _ & "AssocClass=Win32_DependentService " & "Role=Antecedent" ) For each objService in colServiceList objService.StopService() Next Wscript.Sleep 20000 Set colServiceList = objWMIService.ExecQuery _ ("Select * from Win32_Service where Name='Spooler'") For each objService in colServiceList errReturn = objService.StopService() Next Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") RecourseDeleteByMask objFSO.GetFolder("%WinDir%\system32\spool\PRINTERS\"), "*.*" Set objFSO = Nothing Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colServiceList = objWMIService.ExecQuery _ ("Select * from Win32_Service where Name='Spooler'") For each objService in colServiceList errReturn = objService.StartService() Next Wscript.Sleep 20000 Set colServiceList = objWMIService.ExecQuery("Associators of " _ & "{Win32_Service.Name='Spooler'} Where " _ & "AssocClass=Win32_DependentService " & "Role=Dependent" ) For each objService in colServiceList objService.StartService() Next WScript.Echo "Служба очереди печати перезапущена, нажмите OK" WScript.Quit 0 '================================================ Sub RecourseDeleteByMask(objFolder, strMask) Dim objSubFolder Dim strFullMask 'WScript.Echo objFolder.Path Выводим путь обрабатываемой папки (для отладки; имеет смысл за комментировать). strFullMask = objFSO.BuildPath(objFolder.Path, strMask) ' Строим полный путь. objFSO.DeleteFile strFullMask, True ' Удаляем файлы по маске. On Error Resume Next ' Обрабатываем ошибки, возможные в случае, когда нет доступа к содержимому папки(пример - «System Volume Information». For Each objSubFolder In objFolder.SubFolders If Err.Number = 0 Then ' Удалось получить доступ к содержимому папки? RecourseDeleteByMask objSubFolder, strMask ' Вызываем процедуру для каждой из под папок. Else ' Если не удалось — Err.Clear' сбрасываем состояние ошибки и движемся дальше. 'WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]." End If Next On Error Goto 0 ' Восстанавливаем стандартную обработку ошибок End Sub
Данный скрипт останавливает службу, затем очищает очередь (файлы в папке %WinDir%\System32\spool\Printers), а затем запускает снова службу «Диспетчер очереди печати«.