1

Тема: AHK: Перезапуск скрипта

Есть уже откомпилированный скрипт, со своим меню - возможно ли его перезапустить?
Я про перезапуск одной командой или же набором команд?
Ну а как перезапустить, используя создание временного AHK файла, я знаю, но хотелось бы более надёжный и простой способ.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

2

Re: AHK: Перезапуск скрипта

Размытый вопрос. Можно подробнее?
При каком условии должен быть перезапуск?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3

Re: AHK: Перезапуск скрипта

Про команду Reload читали?

4 (изменено: Indomito, 2013-11-02 12:15:56)

Re: AHK: Перезапуск скрипта

ypppu пишет:

Про команду Reload читали?

Да, она указана в контексте OnExit

Встроенная переменная A_ExitReason (причина выхода) пуста, если подпрограмма OnExit не выполняется успешно в данный момент или не была вызвана хотя бы раз при прошлой попытке выхода. Если не пуста, может содержать одно из следующих слов:
...
Reload cкрипт перезагружается через команду Reload или пункт меню.
...

А вот про ReLoad я не нашел ничего, ни параметров и т.д.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

5

Re: AHK: Перезапуск скрипта

Попробуйте такой скрипт:

F2:: Reload

6 (изменено: Indomito, 2013-11-02 12:19:24)

Re: AHK: Перезапуск скрипта

Я думал, что она действует только для не откомпилированных скрипов, т.е. опираясь на AutoHotkey.exe, т.е. срабатывает в конструкции типа

AutoHotkey.exe test.AHK

Я уже "обиспользвался" методом "научного тыка" при создании подменю в трее и мне не очень бы хотелось такого повторения.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

7 (изменено: dm.tr.y, 2017-01-13 11:20:00)

Re: AHK: Перезапуск скрипта

Добрый день.
Сделал скрипт простейший с заменой комбинаций клавиш для конкретной программы. При запуске скрипта и потом программы - скрипт работает. Закинул скрипт в автозагрузку (виндовс 7), он запускается и висит в трее при включении компьютера, но при запуске программы комбинации клавиш не работают, приходится вручную лезть в трей и делать Релоад, после этого опять все работает. Пробывал для программы автохоткей в свойствах ставить запуск с правами админа - не помогает. причина так и не ясна.

Подскажите: как в скрипт вписать Reload при запуске определенной программы (автокада)
или может кто знает почему не срабатывает скрипт?

Сам скрипт:


#UseHook On
#IfWinActive ahk_class AfxMDIFrame100u

vk20::
    KeyWait, vk20, T0.3
    If (ErrorLevel = 0)
        Send, {vk20}
    Else {
        Send, {MButton down}
        KeyWait, vk20
        Send, {MButton up}
    }
    Return

8

Re: AHK: Перезапуск скрипта

Попробуйте вместо директивы #IfWinActive периодически проверять командой IfWinActive существование окна. И, если условие выполнено, задействовать ГК vk20.

9 (изменено: dm.tr.y, 2017-01-14 01:04:25)

Re: AHK: Перезапуск скрипта

А подскажите - как это можно реализовать? К сожалению, не силен в autohotkey.

10

Re: AHK: Перезапуск скрипта

Вот простой пример.

Hotkey, F1, MyLabel, Off
Loop
{
IfWinActive, AutoHotkey Script.ahk - Блокнот
Hotkey, F1, On
Else Hotkey, F1, Off
Sleep, 300
}

MyLabel:
Soundbeep
Return

dm.tr.y, у нас не чат, добавьте заглавные буквы и точки в предыдущее сообщение.

11 (изменено: dm.tr.y, 2017-01-14 12:21:35)

Re: AHK: Перезапуск скрипта

К сожалению очень далек от скриптования в Autohotkey.
Вы не могли бы показать это на моем примере, если возможно? Тогда мне было бы понятно, как подкорректировать под себя. Заранее спасибо.

12

Re: AHK: Перезапуск скрипта

В Вашем случае


Hotkey, vk20, MyLabel, Off
Loop
{
IfWinActive, ahk_class AfxMDIFrame100u
Hotkey, vk20, On
Else Hotkey, vk20, Off
Sleep, 300
}


MyLabel:
KeyWait, vk20, T0.3
If (ErrorLevel = 0)
	Send, {vk20}
Else
	{
	Send, {MButton down}
	KeyWait, vk20
	Send, {MButton up}
	}
Return

13 (изменено: dm.tr.y, 2017-01-13 14:36:04)

Re: AHK: Перезапуск скрипта

Сработало, спасибо. Надо обдумать - как лучше реализовать.
А если у меня около 10 таких комбинаций, получается мне надо отдельно для каждой делать такое условие? Или я могу сделать одно условие для всех комбинаций?

14

Re: AHK: Перезапуск скрипта

Ну если хоть как-то начал работать, значит на виндовс 7 автозапуск ничем не отличается от моего XP. Пошли дальше.

Почитайте в переводе документации вот это статью:

Дед Мазай пишет:
Hotkey

...
Примечания к Hotkey, IfWinXX [, WinTitle, WinText]
В версиях 1.0.42 и более поздних команда "Hotkey IfWin" позволяет создавать или изменять контекстнозависимые горячие клавиши в то время, когда скрипт уже запущен (в отличие от директивы #IfWinActive/Exist, которая используется для задания условий горячим клавишам непосредственно при запуске скрипта).

Скорее всего это и есть ответ на вопрос.


dm.tr.y, второй раз предупреждаю про заглавные буквы.

15 (изменено: Indomito, 2017-01-13 23:50:12)

Re: AHK: Перезапуск скрипта

dm.tr.y пишет:

А подскажите - как это можно реализовать? к сожалению не силен в autohotkey.

Ошибка тут, остальные не смотрел.


Готовый скрипт по назначению HotKey.

;Тут только OK
  сMsgBoxInfo_Ok          :=0+8192+64       ;only an OK button + Task Modal + Icon Asterisk(info)
  сMsgBoxError_Ok         :=0+8192+16       ;only an OK button + Task Modal + Icon Hand (stop/error)  
  сMsgBoxChoice_Ok        :=0+8192+48       ;only an OK button + Task Modal + Icon Exclamation
  
fnHotkey(KeyIn, LabelIn:="lNotLabel", OnOff:=True)
{
Global    ;Глобальне переменные доступны
  StatusIn  := "Off"
  If (OnOff)
        StatusIn  := "On"

  HotKey %KeyIn%,%LabelIn%, %StatusIn%, UseErrorLevel  ; Включение/Выключение HotKey
  MyErrorLevel := ErrorLevel
  If (LabelIn = "lNotLabel")
              MyErrorLevel := 100
  If (MyErrorLevel != 0)
      {
        сHotKeyStrErr := "HotKey" "  " KeyIn ", " LabelIn 
        If (MyErrorLevel = 1)
                Error_TXT := "В параметре Label указано несуществующее имя метки."
        If (MyErrorLevel = 2)
                Error_TXT := "Дубликат горячих клавиш или они не поддерживаются системой."
        If (MyErrorLevel = 3)
                Error_TXT := "Неподдерживаемый модификатор горячей клавиши."
        If (MyErrorLevel = 4)
                Error_TXT := "Клавиши не пригодны для эмуляции AltTab или ShiftAltTab."
        If (MyErrorLevel = 5)
                Error_TXT := "Команда пытается изменить несуществующую горячую клавишу."
        If (MyErrorLevel = 6)
                Error_TXT := "Команда пытается изменить несуществующий вариант существующей горячей клавиши."
        If (MyErrorLevel = 98)
                Error_TXT := "Создание данной горячей клавиши превысило лимит в 700 горячих клавиш."
        If (MyErrorLevel = 99)
                Error_TXT := "Недостаточно памяти. Ваша OS нестабильна, требуется очистка и настройка."
        If (MyErrorLevel = 100)
                Error_TXT := "Назначение метки lNotLabel недопустимо, она зарезервирована програмой."
        If (MyErrorLevel > 100)
                Error_TXT := "Не известная ошибка."
              
        cTitle      :=  "Ошибка в HotKey"
        cMsgErr     :=  "`n Ошибка в определении - " сHotKeyStrErr
        cTxtErrAd1  :=  "`n`n Тип ошибки :"
        cTxtErrAd2  :=  "`n " Error_TXT
        cWait       :=  15
        cTxtErrAd3  :=  "`n`n Выход из программы(Тайм-аут = " cWait " сек)."
        MsgBox % сMsgBoxError_Ok, %cTitle%, %cMsgErr% %cTxtErrAd1% %cTxtErrAd2% %cTxtErrAd3%, %cWait%      
        ExitApp
      }
Return
}
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

16 (изменено: dm.tr.y, 2017-01-14 13:00:39)

Re: AHK: Перезапуск скрипта

ypppu пишет:

Почитайте в переводе документации вот это статью:

Читал про нее еще до того, как обратился к вам за помощью, но из-за отсутствия знаний  в автохоткей не могу понять - что из этого следует: или есть другая альтернативная команда, или надо использовать "IfWinActive" по вашему методу?
Если честно, то у меня не лежит душа к предложенному вами варианту. Он усложняет для моего понимания скрипт и мне уже тяжело им оперировать.

Может все таки есть возможность сделать команду Reload при запуске автокада "ahk_class AfxMDIFrame100u"?

Что интересно: изначальный скрипт, после запуска виндовс, частично работает с программой (некоторые клавишы), но похоже не срабатывает IfWinActive. И если после запуска виндовс, но до запуска программы сделать релоад вручную, то запуская потом программу он работает как надо.

17

Re: AHK: Перезапуск скрипта

dm.tr.y, да, для Ваших целей должна подойти команда Hotkey, IfWinXX [, WinTitle, WinText]. В той же статье объясняется, почему при автозапуске не работает директива #IfWinActive: потому что в этот момент целевое окно просто не существует.
Мой скрипт просто для теста, правильнее использовать команду Hotkey, IfWinXX.

18 (изменено: dm.tr.y, 2017-01-14 15:55:26)

Re: AHK: Перезапуск скрипта

Подскажите: правильно ли я написал?

#UseHook On
Hotkey, IfWinActive, ahk_class AfxMDIFrame100u

{vk20::	;пробел
    KeyWait, vk20, T0.3
    If (ErrorLevel = 0)
        Send, {vk20}
    Else {
        Send, {MButton down}
        KeyWait, vk20
        Send, {MButton up}
    }
    Return
}

19

Re: AHK: Перезапуск скрипта

Делайте как в примере: горячая клавиша должна задаваться командой Hotkey, а не двоеточием.

Дед Мазай пишет:

Hotkey, IfWinActive, ahk_class Notepad
Hotkey, ^!e, MyLabel

Соответственно выполняемые действия нужно загнать в подпрограмму. Подпрограмма оформляется так:

MyLabel:    ;название
SoundBeep   ;нужные
MsgBox      ;действия
Return      ;команда возврата