Я использую этот код для отправки большего количества прокруток колесика мыши, используя одну метку, проблема в том, что ввод передается снова до завершения цикла, он не учитывается и цикл должен завершиться перед повторным запуском
Я пытался найти способ разбить код, если есть вход и перезапустить его безуспешно
WheelUp::
loop 100
{
sendInput {WheelUp}
sleep 2
}
return
Ожидаемое поведение: в 50-м цикле, если ввод будет повторен, сбросьте счетчик цикла (остановите и перезапустите сценарий), чтобы общее количество повторений составило 150
2 ответа
Попробуйте этот подход.
Вы должны изменить настройку #MaxThreadsPerHotkey.
Этот параметр используется для управления количеством «экземпляров» данной горячей клавиши или подпрограммы горячей строки, которые могут существовать одновременно. Например, если горячая клавиша имеет максимум 1 и она нажата снова, когда подпрограмма уже запущена, нажатие будет проигнорировано.
Это позволит горячей клавише «прерывать» себя. Каждый раз, когда вы прокручиваете вверх, когда горячая клавиша уже активна, он добавляет еще 100 прокруток в цикл.
#MaxThreadsPerHotkey 2
WheelUp::
if (counter > 0) ; this means the hotkey is already active
{
counter := counter + 100 ; in that case we just add another 100 scrolls to the loop
return
}
else ; this means the hotkey is not active, we start fresh with 100 scrolls
{
counter := 100
}
while, counter > 0
{
sendinput, {WheelUp}
sleep 40 ; change this to your requirement
counter--
; tooltip, % counter ; un-comment this line for testing
}
return
~WheelDown::counter := 0 ; extra hotkey to stop the loop immediately if needed
Я не могу ответить на другой комментарий, но WheelUp::Send, {WheelUp 100}
не прервет текущие 100 разрядов и добавит еще 100 разминок. Таким образом, если ввод был снова введен для 50-го WheelUp, он все равно отправил бы 200 WheelUps.
В цикле вам понадобится условный оператор, чтобы определить, было ли недавно обнаружено физическое прокручивание вверх, а затем перезапустить цикл, если это произойдет. Для большинства ключей вы должны использовать GetKeyState
в качестве проверки в операторе if, однако у колеса мыши нет состояния для обнаружения.
В моем примере кода кнопка Enter перезапустит цикл. Я не уверен, как перезапустить цикл, если снова пытаюсь использовать WheelUp, так как нет состояния для обнаружения, и A_TimeSincePriorHotkey
ненадежен, потому что цикл отправляет WheelUps.
WheelUp::
loop 100
{
sendInput {WheelUp}
sleep 2
if (GetKeyState("Enter", "P"))
Goto WheelUp
}
return
Похожие вопросы
Новые вопросы
autohotkey
AutoHotkey (AHK) - это бесплатное программное обеспечение с открытым исходным кодом для создания макросов и автоматизации для Microsoft Windows, которое позволяет пользователям автоматизировать повторяющиеся задачи. Он управляется языком сценариев, который изначально был нацелен на предоставление сочетаний клавиш, также называемых горячими клавишами, которые со временем превратились в полноценный язык сценариев.