1 (изменено: broneg, 2012-10-24 16:09:36)

Тема: AHK: Перестаёт реагировать на горячие клавиши

Добрый день! Всегда находил решения своих проблем в написании на этом замечательном форуме, но теперь, что-то ,не могу найти решение... в общем скрипт, для примера:


#MaxThreadsPerHotkey, 20
;~ #NoEnv        
;~ #UseHook

F1::
SoundPlay %A_WorkingDir%\blip1.wav
Loop
{
	tooltip, proverka
	tooltip
}
return

через ~10 нажатий клавиши F1, скрипт перестаёт реагировать на эту горячую клавиши, т.е. не слышен звук blip1.wav и выполняется цикл.

2

Re: AHK: Перестаёт реагировать на горячие клавиши

#MaxThreadsPerHotkey, 20 ; может «одновременно» выполнятся 20 копий подпрограммы конкретной горячей клавиши.
 
F1:: ; метка горячей клавиши обозначающая начало подпрограммы горячей клавиши.
SoundPlay %A_WorkingDir%\blip1.wav ; это действие в подпрограмме данной горячей клавиши выполняется однократно.
Loop ; начало бесконечного цикла
{
    tooltip, proverka ; первое действие бесконечного цикла
    tooltip ; второе действие бесконечного цикла
} ; конец блока бесконечного цикла
return ; конец подпрограммы горячей клавиши.

Подпрограмма горячей клавиши никогда не будет завершена, так как содержит бесконечный цикл.
Как написано, так и работает. Не вижу проблем в скрипте, не вижу вопросов в сообщении.

3

Re: AHK: Перестаёт реагировать на горячие клавиши

ааа...т.е. 20 раз горячая клавиша запускает, если можно так сказать, 20 потоков, и всё, больше такого не происходит?


а то

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

вот и подумал, что хоткей должен запускаться заново вне зависимости от завершения чего-либо.. т.е. прекращать настоящее действие и начинать всё заново

4

Re: AHK: Перестаёт реагировать на горячие клавиши

Хоткей и запускается заново, вне зависимости от предыдущего псевдопотока. Количество допустимых псевдопотоков указано в первой строке.

5

Re: AHK: Перестаёт реагировать на горячие клавиши

Не понимаю..как он запускается, если первое действие (SoundPlay %A_WorkingDir%\blip1.wav)  не выполняется? Т.е. он запускается, и не выполняется? Или вы имеет ввиду, что он встаёт в очередь?

6

Re: AHK: Перестаёт реагировать на горячие клавиши

У вас в первой строке кода указано, сколько потоков может создать горячая клавиша. После 20-го, естественно, ничего уже не запускается. А до этого всё как описано.

7

Re: AHK: Перестаёт реагировать на горячие клавиши

У меня тоже только 10 создается.
Я проверял таким кодом в блокноте

#MaxThreadsPerHotkey, 20
;~ #NoEnv        
;~ #UseHook
 
F1::
Send, x
WinWait, xxxxx
return

The maximum number of threads that can be launched for a given hotkey/hotstring subroutine (limit 20).

Может у них там ошибка, не 20, а 10.
Версия автохотки 1.1.08.01

8

Re: AHK: Перестаёт реагировать на горячие клавиши

YMP пишет:

У вас в первой строке кода указано, сколько потоков может создать горячая клавиша. После 20-го, естественно, ничего уже не запускается. А до этого всё как описано.

Ну да, я ,наверное, ввёл в заблуждение этой директивой. Давайте без неё:

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

И,вроде бы, так и было (=   Т.е. эта строчка из "Документация по программе AutoHotkey" является не верной? Ведь горячая клавиша не может прервать цикл..   Вот что меня волнует. Как горячей клавишей прервать выполнение скрипта и начать выполнять команды этой горячей клавиши.

9

Re: AHK: Перестаёт реагировать на горячие клавиши

Т.е. эта строчка из "Документация по программе AutoHotkey" является не верной? Ведь горячая клавиша не может прервать цикл

Строчка является верной. Вы её неправильно интерпретируете.

Как горячей клавишей прервать выполнение скрипта и начать выполнять команды этой горячей клавиши.

Самым правильным будет считать — никак.

Может у них там ошибка, не 20, а 10.

#MaxThreadsPerHotkey, 20
#MaxThreads 20

F1::
Send, x
WinWait, xxxxx
return

Ошибки там тоже нет

10 (изменено: Malcev, 2012-10-25 15:11:27)

Re: AHK: Перестаёт реагировать на горячие клавиши

Ошибки там тоже нет

Точно, так как #MaxThreads -

If this setting is lower than #MaxThreadsPerHotkey, it effectively overrides that setting.
If this directive is unspecified in the script, it will behave as though set to 10.

Как горячей клавишей прервать выполнение скрипта и начать выполнять команды этой горячей клавиши.

Вот тут creature.ws придумал костыль.
http://forum.script-coding.com/viewtopi … 857#p58857

11

Re: AHK: Перестаёт реагировать на горячие клавиши

creature.ws пишет:

Т.е. эта строчка из "Документация по программе AutoHotkey" является не верной? Ведь горячая клавиша не может прервать цикл

Строчка является верной. Вы её неправильно интерпретируете.

а вы можете разъяснить эту строчку, тогда?(=

creature.ws пишет:

Самым правильным будет считать — никак.

Malcev пишет:

Вот тут creature.ws придумал костыль.
http://forum.script-coding.com/viewtopi … 857#p58857

ну.. хотелось бы без этого, но ничего не поделаешь, придётся выкручиваться (=

12

Re: AHK: Перестаёт реагировать на горячие клавиши

Если проверки нечасто нужны, то можно так.

Label1:
Stop = 0
msgbox, start
Loop
{
   If stop = 1
   Gosub Label1
   Else
   {
      msgbox loop
      sleep 1000
   }
}
return

F11::
Stop = 1

13

Re: AHK: Перестаёт реагировать на горячие клавиши

эм..стоп.

Loop
{
    tooltip, proverka
    tooltip
}
return


F1::
SoundPlay %A_WorkingDir%\blip1.wav
return

Это получается горячая клавиша сама себя запустить не может, но может другую горячую клавишу запустить?? Что-то я перестал понимать условия, при которых горячая клавиша может запускаться, а при каких не может D=