Вопрос или проблема
У меня есть .vbs-скрипт, который бесконечно работает в фоновом режиме. Этот скрипт не имеет возможности взаимодействия с пользователем; обычный пользователь даже не заметит, что что-то работает в фоне. Теперь мне нужно иметь возможность завершить этот скрипт в любое время.
Итак, я ищу самый простой способ отменить этот .vbs-скрипт, не используя Диспетчер задач, другие инструменты или дополнительные скрипты, и не вводя что-то вроде этого в PowerShell или командной строке:
PowerShell: Stop-Process -Name wscript
Командная строка: Taskkill /IM wscript
Я попробовал запустить .cmd-скрипт, который просто запускает .vbs-скрипт. Я надеялся, что смогу завершить .vbs-скрипт вместе с .cmd, либо нажав CTRL+C, либо закрыв командную строку, но я протестировал это, и это не сработало.
Поэтому я немного погуглил и узнал, что можно создать видимый значок в области уведомлений для работающего .vbs-скрипта, который позволит закрыть его при правом клике.
Но я не могу заставить это работать. Ниже вы можете увидеть код, который я пробовал.
Первые три строки — это для значка в области уведомлений, строки с четвертой по девятую — это сам скрипт, который работает в фоновом режиме:
Public Declare Function Shell_NotifyIcon Lib "shell32" _
Alias "Caffeinate" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Dim objResult
Set objShell = WScript.CreateObject("WScript.Shell")
Do While True
objResult = objShell.sendkeys("{NUMLOCK}{NUMLOCK}")
Wscript.Sleep (6000)
Loop
Кто-нибудь знает, как использовать значок в области уведомлений для .vbs-скрипта?
В качестве альтернативы любой другой “простой в использовании” способ отменить такой .vbs-скрипт был бы очень хорош.
С наилучшими пожеланиями,
Кевин
@ZevSpitz Ваш совет отлично работает, спасибо еще раз. 😀
Теперь я делаю это так:
Ответ или решение
Для решения вашей задачи по созданию видимой иконки в системном трей для .vbs-скрипта, чтобы пользователи могли легко его остановить, вы можете воспользоваться следующими рекомендациями. Вам потребуется немного изменить исходный код вашего .vbs-скрипта, добавив функциональность для отображения иконки в трее и выполняя соответствующие действия при взаимодействии с ней.
Шаг 1: Создание иконки в системном трей
Для начала, вот пример кода, который создаёт иконку в трей и позволяет завершать скрипт при щелчке правой кнопкой мыши:
' Формат иконки в трей
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIM_MODIFY = &H1
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONUP = &H205
Public Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
dwState As Long
dwStateMask As Long
dwVersion As Long
szInfo As String * 256
uTimeout As Long
szInfoTitle As String * 64
dwInfoFlags As Long
End Type
Dim NoteIcon As NOTIFYICONDATA
Dim objShell, RetVal
Set objShell = CreateObject("Shell.Application")
NoteIcon.cbSize = Len(NoteIcon)
NoteIcon.hWnd = WScript.Arguments(0)
NoteIcon.uID = 1
NoteIcon.uFlags = &H1
NoteIcon.szTip = "Скрипт активен"
NoteIcon.hIcon = LoadIcon(0, 32512) ' Это стандартная иконка
RetVal = Shell_NotifyIcon(NIM_ADD, NoteIcon)
' Зацикливание основного действия
Do While True
objShell.SendKeys "{NUMLOCK}{NUMLOCK}"
WScript.Sleep 6000
Loop
' Завершение работы
Sub Shutdown()
RetVal = Shell_NotifyIcon(NIM_DELETE, NoteIcon)
WScript.Quit
End Sub
' Установка обработчика при щелчке правой кнопкой мыши
Dim Event
Set Event = objShell.AppActivate("MyApp")
If Event Then
MsgBox "Завершить скрипт?", vbYesNo, "Выход"
If vbYes = MsgBoxResult Then
Shutdown()
End If
End If
Шаг 2: Настройка иконки и работа со съедобной мышью
Вам необходимо будет реализовать обработку событий мыши. Поскольку VBScript не поддерживает многопоточность и прямой ввод событий мыши в стандартной комплектации, может потребоваться использование дополнительного инструментария или внешних библиотек, таких как User32.dll
для управления событиями мыши и системным треем.
Шаг 3: Установка скрипта
-
Создайте файл: Скопируйте вышеописанный код в текстовый файл и сохраните его с расширением
.vbs
, например,MyScript.vbs
. -
Запуск скрипта: Запустите ваш .vbs-скрипт, и он создаст иконку в системном трее.
-
Завершение скрипта: Щелкнув правой кнопкой мыши на иконку, пользователи смогут увидеть уведомление, предложение завершить скрипт.
Заключение
Использование иконки в системном трее для управления фоновым .vbs-скриптом значительно упрощает взаимодействие пользователя с процессом, обеспечивая моментальный доступ к управляющим функциям. Помните, что для полноценной работы с системными иконками и событиями может потребоваться подключение дополнительных библиотек или использование других языков программирования, таких как VB.NET или C#, которые обеспечивают более широкий доступ к Windows API.
Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться. Удачи в реализации вашего проекта!