Суть такова.
Периодически забивается очередь печати, не дающая возможность печатать что либо дальше.
Единственный способ - перезапустить службу "Диспетчер очереди печати" с очисткой файлов из очереди печати.
Вот скрипт:
Но, после всего этого, в трее продолжает висеть значок "Диспетчера очереди печати" и сам он оттуда уже не убирается, даже если продолжаешь печатать.
Единственный способ (при пустой очереди печати) - это в его контекстном меню выбрать пункт "Обновить ...", тогда он исчезает.
Вот даже нашел скрипт как открыть контекстное меню:
А вот как выбрать пункт меню "Обновить ..." пока не знаю.
Пытался с помощью ResHacker-а узнать ID контекстного меню, но в файле spoolsv.exe меню не оказалось.
Может иконку из трея можно убрать как то и иначе, не знаю, пока нашел только способ с "Обновить ..." - в общем надо как то её убрать из трея.
Так, что я пока в очень сильном затруднении как поступить дальше.
Периодически забивается очередь печати, не дающая возможность печатать что либо дальше.
Единственный способ - перезапустить службу "Диспетчер очереди печати" с очисткой файлов из очереди печати.
Вот скрипт:
Код:
#NoTrayIcon
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=printer.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;============================================ Check of running copy ============================================
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
$objShellApp = ObjCreate("Shell.Application")
$Service = "Spooler"
$dir = @SystemDir & "\spool\PRINTERS\"
If FileFindFirstFile($dir & "*.*") = -1 Then
MsgBox(48, "Очистка очереди печати.", "В очереди печати нет ни одного задания!" & @CRLF & "Можете продолжать печать!")
Exit
EndIf
If MsgBox(32+4, "Очистка очереди печати.", "Вы действительно хотите очистить очередь печати?") = 7 Then Exit
If $objShellApp.IsServiceRunning($Service) Then
If $objShellApp.ServiceStop($Service, false) = 0 Then
MsgBox(16, "Очистка очереди печати.","Ошибка " & @error & " при остановке сервиса")
Exit
EndIf
EndIf
Sleep(500)
If FileDelete($dir & "*.*") = 0 Then
MsgBox(16, "Очистка очереди печати.","Ошибка при удалении файлов из очереди печати!" & @CRLF & "Попробуйте еще раз!")
If $objShellApp.ServiceStart($Service, false) = 0 Then
MsgBox(16, "Очистка очереди печати.","Ошибка " & @error & " при запуске сервиса")
Else
If $objShellApp.IsServiceRunning($Service) = False Then
MsgBox(16, "Очистка очереди печати.","Ошибка " & @error & " при запуске сервиса")
EndIf
EndIf
Exit
EndIf
If $objShellApp.ServiceStart($Service, false) = 0 Then
MsgBox(16, "Очистка очереди печати.","Ошибка " & @error & " при запуске сервиса")
Else
If $objShellApp.IsServiceRunning($Service) = False Then
MsgBox(16, "Очистка очереди печати.","Ошибка " & @error & " при запуске сервиса")
EndIf
MsgBox(48, "Очистка очереди печати.","Очередь печати успешно очищена" & @CRLF & "Можете продолжить печать!")
EndIf
Но, после всего этого, в трее продолжает висеть значок "Диспетчера очереди печати" и сам он оттуда уже не убирается, даже если продолжаешь печатать.
Единственный способ (при пустой очереди печати) - это в его контекстном меню выбрать пункт "Обновить ...", тогда он исчезает.
Вот даже нашел скрипт как открыть контекстное меню:
Код:
#NoTrayIcon
#include <SysTray_UDF.au3>
;
$Pid = ProcessExists("spoolsv.exe")
If Not $Pid Then
MsgBox(16, "Error", "This process not exists")
Exit
EndIf
$Index = _SysTrayIconIndex($Pid)
If @error Then
MsgBox(16, "Error", "This process not have tray icon")
Exit
EndIf
_SysTrayIconClick($Index, "Right")
If @error Then
MsgBox(16, "Error", "There was an error to click on the icon")
Exit
EndIf
Func _SysTrayIconClick($iIndex, $sButton="Main")
Local $TrayIcon_Pos = _SysTrayIconPos($iIndex)
If Not IsArray($TrayIcon_Pos) Then Return SetError(1, 0, 0)
Local $Old_Mouse_Pos = MouseGetPos()
MouseClick($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0)
MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0)
EndFunc
А вот как выбрать пункт меню "Обновить ..." пока не знаю.
Пытался с помощью ResHacker-а узнать ID контекстного меню, но в файле spoolsv.exe меню не оказалось.
Может иконку из трея можно убрать как то и иначе, не знаю, пока нашел только способ с "Обновить ..." - в общем надо как то её убрать из трея.
Так, что я пока в очень сильном затруднении как поступить дальше.