1

Тема: AHK: Настройка запуска/перезапуска скрипта

Здравствуйте!
Есть скрипт с названием Script.ahk - появление MsgBox1 с текстом "Программа запущена". При запуске скрипта Autohotkey должен проверять, был ли он запущен ранее и не закрыт. Если да - выполнять перезапуск, сообщать об этом с помощью другого MsgBox (MsgBox2) и после этого запускать скрипт. Пыталась написать такой скрипт, но он просто перезапускается без появления MsgBox2. Что я делаю не так?

process, exist, Script.ahk ;проверяет, был ли запущен ранее такой же скрипт
if errorlevel1
	{
	#SingleInstance Force
	MsgBox, 48, Перезапуск, Выполняется перезапуск Script. Программа будет открыта через несколько секунд..., 2 ;это MsgBox2
	MsgBox, 64, Готово, Script запущен!, ;это MsgBox1
	}
else
{
MsgBox, 64, Готово, Script запущен!, ;это MsgBox1
}

2

Re: AHK: Настройка запуска/перезапуска скрипта

marusa122 пишет:

Что я делаю не так?

Похоже, не можете сами точно сформулировать задачу.

marusa122 пишет:

Если да - выполнять перезапуск

Перезапуск чего, себя, или другого скрипта?

marusa122 пишет:

сообщать об этом с помощью другого MsgBox (MsgBox2)

Сообщать до перезапуска, или после?

marusa122 пишет:

и после этого запускать скрипт

Так мы же вроде его уже запустили?
Я запутался!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: EV, 2023-04-17 01:32:52)

Re: AHK: Настройка запуска/перезапуска скрипта

Обратите внимание на "process, exist, Script.ahk", нет процесса Script.ahk, у всех ровных пацанов процесс Script.exe , и на if errorlevel1.
Скомпилируйте  Script.ahk в Script.exe если нужен process, exist.

4

Re: AHK: Настройка запуска/перезапуска скрипта

Что я делаю не так?

Да собственно всё. начиная с вопроса, заканчивая кодом.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5 (изменено: marusa122, 2023-04-17 08:07:31)

Re: AHK: Настройка запуска/перезапуска скрипта

Перезапуск чего, себя, или другого скрипта?

Перезапуск себя

Сообщать до перезапуска, или после?

До перезапуска
Извините, если я что-то упустила. Алгоритм действий скрипта должен быть таким:
1) Запускаем скрипт Script.ahk
2) Autohotkey проверяет, был ли запущен такой скрипт ранее (активен ли в данный момент такой же процесс).

  • Если да, то вместо "An older instance of this script is already running.  Replace it with this instance?" должен появиться MsgBox1 "Выполняется перезапуск программы". Этот MsgBox1 должен исчезнуть через 3 секунды. И после него должен появиться другой MsgBox2 "Программа запущена".

  • Если нет, то сразу должен появиться MsgBox2 "Программа запущена".

6

Re: AHK: Настройка запуска/перезапуска скрипта

А перезапуск когда? И что в итоге, должны работать два скрипта параллельно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: marusa122, 2023-04-17 17:50:50)

Re: AHK: Настройка запуска/перезапуска скрипта

teadrinker перезапуск скрипта после появления MsgBox1 "Выполняется перезапуск программы".

8

Re: AHK: Настройка запуска/перезапуска скрипта

Если я всё правильно понял, то так:

#SingleInstance Off
SetTitleMatchMode, 2
DetectHiddenWindows, On

if A_Args[1]
   MsgBox, 64, Готово, Script запущен!
else {
   WinGet, list, List, %A_ScriptName% ahk_class AutoHotkey
   found := false
   Loop % list
      continue
   until list%A_Index% != A_ScriptHwnd && found := true
   
   if !found
      MsgBox, 64, Готово, Script запущен!
   else {
      MsgBox, 48, Перезапуск, Выполняется перезапуск Script. Программа будет открыта через несколько секунд..., 2
      Run, % A_ScriptFullPath . " 1"
      ExitApp
   }
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: marusa122, 2023-04-17 19:52:30)

Re: AHK: Настройка запуска/перезапуска скрипта

teadrinker, да, оно! Только теперь в трее появляется второй-третий-четвертый значок Script.ahk после каждого перезапуска. Как это исправить? Пробовала поменять в вашем скрипте "#SingleInstance Off" на "#SingleInstance Force" - помогло, но опять пропал MsgBox2 с сообщением о перезапуске.

10

Re: AHK: Настройка запуска/перезапуска скрипта

marusa122 пишет:

в трее появляется второй-третий-четвертый значок Script.ahk

Ну да, работает соответственно вашему описанию. Если скрипт уже существует, то новозапущенный скрипт выдаёт сообщение и перезапускается, соответственно, получается уже два скрипта. Если запустить ещё раз, то будет три, и т. д.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Настройка запуска/перезапуска скрипта

teadrinker а как сделать так, чтобы при перезапуске закрывалась предыдущая версия скрипта? Чтобы в трее постоянно оставался только один значок - версия скрипта, актуальная после последнего перезапуска.
Например, в скрипте автозамены. В первой версии скрипта код

:*:btw::by the way

Я вношу изменения в скрипт (в Блокноте). Например, добавляю еще одну замену. Сохраняю скрипт. Теперь он выглядит так:

:*:btw::by the way
:*:exp::example

Перезапускаю скрипт, чтобы изменения вступили в силу. Выскакивает "An older instance of this script is already running.  Replace it with this instance?". И пока не нажмешь "Да", новая версия версия скрипта не запустится. Цель - чтобы вместо этого оповещения выскакивал Msgbox "Выполняется перезапуск Script. Программа будет открыта через несколько секунд...", который автоматически пропадает через пару секунд, и после этого запускается обновленная версия скрипта (уже с новой добавленной автозаменой).

12

Re: AHK: Настройка запуска/перезапуска скрипта

Тогда можно так:

#SingleInstance Off
SetTitleMatchMode, 2
DetectHiddenWindows, On

WinGet, list, List, %A_ScriptName% ahk_class AutoHotkey
found := false
Loop % list
   continue
until list%A_Index% != A_ScriptHwnd && found := list%A_Index%

if !found
   MsgBox, 64, Готово, Script запущен!
else {
   WinMenuSelectItem, ahk_id %found%,, File, Exit (Terminate Script)
   MsgBox, 48, Перезапуск, Script перезапущен, 2
}

Но проще было бы написать в начале #SingleInstance, Force, тогда новый скрипт будет заменять старый без всяких ухищрений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Настройка запуска/перезапуска скрипта

teadrinker спасибо, это то, что нужно!

14 (изменено: __Михаил__, 2023-04-18 18:36:48)

Re: AHK: Настройка запуска/перезапуска скрипта

Не проще ли нормальный код писать и не выдумывать всякие костыли? Задача быстро применять новые изменения в скрипте? Тогда просто добавив одну строку можно перезапускать текущий скрипт. Зачем искать его в папке, дважды кликать по нему?

F6:: Reload
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101