|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как убрать "Диспетчер очереди печати" (spoolsv.exe) из трея? |
|
[решено] Как убрать "Диспетчер очереди печати" (spoolsv.exe) из трея?
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Суть такова.
Периодически забивается очередь печати, не дающая возможность печатать что либо дальше. Единственный способ - перезапустить службу "Диспетчер очереди печати" с очисткой файлов из очереди печати. Вот скрипт: #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 меню не оказалось. Может иконку из трея можно убрать как то и иначе, не знаю, пока нашел только способ с "Обновить ..." - в общем надо как то её убрать из трея. Так, что я пока в очень сильном затруднении как поступить дальше. |
|
Отправлено: 20:54, 14-03-2010 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата kuzyaka:
#include <GuiToolBar.au3> #include <GuiMenu.au3> #include <WindowsConstants.au3> $sToolTipTitle = "Отложено документов:" $hSysTray_Handle = ControlGetHandle("[Class:Shell_TrayWnd]", "", "[Class:ToolbarWindow32;Instance:1]") If @error Then Exit MsgBox(16, "Error", "System tray not found") $iSystray_ButCount = _GUICtrlToolbar_ButtonCount($hSysTray_Handle) If $iSystray_ButCount = 0 Then Exit MsgBox(16, "Error", "No items found in system tray") For $iSystray_ButtonNumber = 1 To $iSystray_ButCount If StringInStr(_GUICtrlToolbar_GetButtonText($hSysTray_Handle, $iSystray_ButtonNumber), $sToolTipTitle) Then ExitLoop Next If $iSystray_ButtonNumber = $iSystray_ButCount+1 Then Exit MsgBox(16, "Error", "Item Not Found") _GUICtrlToolbar_ClickButton($hSysTray_Handle, $iSystray_ButtonNumber, "right", True, 1, 0) WinWait("[CLASS:#32768]") $hWndTray = WinGetHandle("[CLASS:#32768]") $hMenu = _SendMessage($hWndTray, $MN_GETHMENU, 0, 0) $aRect = _GUICtrlMenu_GetItemRect($hWndTray, $hMenu, 2) MouseClick("left", $aRect[0]+5, $aRect[1]+5, 1, 1) |
|
Отправлено: 05:09, 15-03-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать amel27
Благодарю - все прекрасно работает. |
Отправлено: 14:48, 15-03-2010 | #3 |
Старожил Сообщения: 413
|
Профиль | Отправить PM | Цитировать amel27 с вашей подсказки перелопатил скрипт для закрытия AdMunch.exe
#include <GuiToolBar.au3> #include <GuiMenu.au3> #include <WindowsConstants.au3> ;$sToolTipTitle = "Отложено документов:" $sToolTipTitle = "Ad Muncher v4.8 Build 31318/2796" $hSysTray_Handle = ControlGetHandle("[Class:Shell_TrayWnd]", "", "[Class:ToolbarWindow32;Instance:1]") If @error Then Exit ;MsgBox(16, "Error", "System tray not found") $iSystray_ButCount = _GUICtrlToolbar_ButtonCount($hSysTray_Handle) If $iSystray_ButCount = 0 Then Exit ;MsgBox(16, "Error", "No items found in system tray") For $iSystray_ButtonNumber = 1 To $iSystray_ButCount If StringInStr(_GUICtrlToolbar_GetButtonText($hSysTray_Handle, $iSystray_ButtonNumber), $sToolTipTitle) Then ExitLoop Next If $iSystray_ButtonNumber = $iSystray_ButCount+1 Then Exit ;MsgBox(16, "Error", "Item Not Found") _GUICtrlToolbar_ClickButton($hSysTray_Handle, $iSystray_ButtonNumber, "right", True, 1, 0) WinWait("[CLASS:#32768]") $hWndTray = WinGetHandle("[CLASS:#32768]") $hMenu = _SendMessage($hWndTray, $MN_GETHMENU, 0, 0) ;$aRect = _GUICtrlMenu_GetItemRect($hWndTray, $hMenu, 2) $aRect = _GUICtrlMenu_GetItemRect($hWndTray, $hMenu, 11) MouseClick("left", $aRect[0]+170, $aRect[1]+5, 1, 0) Цитата:
|
|
Отправлено: 19:57, 10-06-2010 | #4 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать mamont1,
У меня Ad Muncher так закрывается: #include <SysTray_UDF.au3> $Pid = ProcessExists("AdMunch.exe") If Not $Pid Then Exit BlockInput(1) Local $Old_Mouse_Pos = MouseGetPos() MouseMove(@DesktopWidth / 2, @DesktopHeight, 0) Sleep(50) $Index = _SysTrayIconIndex($Pid) If @error Then Exit _SysTrayIconClick($Index, "Right") MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0) BlockInput(0) Func _SysTrayIconClick($iIndex, $sButton = "Main") Local $TrayIcon_Pos = _SysTrayIconPos($iIndex) If Not IsArray($TrayIcon_Pos) Then Return SetError(1, 0, 0) MouseClick($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0) MouseClick("left", $TrayIcon_Pos[0] - 15, $TrayIcon_Pos[1] - 15, 1, 0) EndFunc ;==>_SysTrayIconClick А так, ИМХО, проще всего: If ProcessExists("AdMunch.exe") Then ProcessClose("AdMunch.exe") |
|
Последний раз редактировалось madmasles, 10-06-2010 в 22:22. Отправлено: 21:45, 10-06-2010 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата mamont1:
BlockInput(0) - в конце скрипта |
|
Отправлено: 05:19, 11-06-2010 | #6 |
Старожил Сообщения: 413
|
Профиль | Отправить PM | Цитировать madmasles у меня ваш вариант старый тоже работал, но не всегда.
А вариант который ваше с Цитата amel27:
amel27 Спасибо. |
|
Отправлено: 12:17, 11-06-2010 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Службы - Останавливается служба диспетчер очереди печати | Alien2 | Microsoft Windows 2000/XP | 68 | 29-01-2019 19:39 | |
Отключается служба "Диспетчер очереди печати" на сервере Microsoft Windows 2003 R2 | sashaverx | Microsoft Windows NT/2000/2003 | 1 | 29-01-2010 09:28 | |
Службы - [решено] Пропал диспетчер очереди печати | NDK | Microsoft Windows 2000/XP | 1 | 19-08-2009 15:08 | |
Альтернатива сервиса "Очереди Печати" в Win2003 Server | philippov | Microsoft Windows NT/2000/2003 | 8 | 11-09-2008 07:46 | |
как восстановить диспетчер очереди печати | nataliia | Microsoft Windows 2000/XP | 3 | 21-03-2006 07:22 |
|