1

Тема: AHK : цикл при имитации зажатой кнопки

Добрый день!

Написал следующий код:


shift::
loop
{
if GetKeyState("ctrl","p")
{
Send {LButton Up}
return
}
Send {LButton Down}
Send, {RButton}
Sleep, 550
Send, {XButton1}
Sleep, 50
Send, {XButton2}
Sleep, 50
Send, {MButton}
Sleep, 450
}

Что хочу получить, при "физическом" нажатии (и отпускании) клавиши "shift" активирую скрипт, который имитирует зажатие левой кнопки мыши с одновременным выполнением цикла следующего содержания:
-нажатие (клик) правой кнопки мыши + ожидание 550мс
-нажатие (клик) четвертой кнопки мыши + ожидание 50мс
-нажатие (клик) пятой кнопки мыши + ожидание 50мс
-нажатие (клик) третьей кнопки мыши + ожидание 450мс.
После "физического" нажатия (и отпускания) "ctrl" цикл и имитация зажатия левой кнопки мыши прерываются (не пауза) до следующего нажатия (и отпускания) клавиши "shift" (цикл работает с начала).
На практике при работе скрипта часто не срабатывает команда на "клик" правой кнопкой мыши (возможно и других, замечал только по правой кнопке), а также физическое "нажать кнопку "ctrl"" принимает вид постоянного кратковременного нажатия на "ctrl" до остановки скрипта.
Как это исправить? Так же было бы удобнее "запуск" и "прерывание" работы скрипта перевести на одну клавишу "shift".

2

Re: AHK : цикл при имитации зажатой кнопки

Справка → Send → Blind, SendMode;
Справка → SetTimer(Таймеры) → toggle.

3

Re: AHK : цикл при имитации зажатой кнопки

Спасибо за ответ, но и вопросов появилось еще больше
Если я правильно понимаю:
{Blind} - ставлю первым в посылаемой строке (во все команды send?) что бы скрипт работал без прерываний.
SendMode input- защита симулируемых скриптом нажатий от прерывания физическими нажатиями. Использую в секции авто выполнения (вверху скрипта).
SetTimer - частота выполняемых действий (в моем случае все действия взаимосвязаны). Задержки после каждого из них нужны для регенерации расходуемого на них ресурса.
Расчет такой, скорость атаки равна 1,82 тогда за 1,1 секунды я проведу две атаки (атака на левой кнопке мыши, которая по идее должна быть зажата во время работы скрипта). С каждой из атак я получаю реген ресурса который необходим для выполнения 1, 2 и 3 действий ({RButton}, {XButton1} и {XButton2}), четвертое - вспомогательное.
Значит у меня получается один SetTimer на цикл из 4 действий?

4

Re: AHK : цикл при имитации зажатой кнопки

SetTimer может заменить loop, позволяя запускать и останавливать таймер(бывший цикл) одной кнопкой. Время таймера у вас выходит 1100. Можно и подругому ставить таймеры на -1 в секции автовыполнения и в конце подпрограммы таймера.

5

Re: AHK : цикл при имитации зажатой кнопки

stealzy пишет:

останавливать таймер

Ну так а что это даст в данном случае? Это по сути тоже что break в начале цикла. Timer мы выключим, а подпрограмма всё равно продолжит выполнение до конца.
Я так понял что вопрос - как прервать\завершить именно поток, как и в недавнем вопросе.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

6 (изменено: sps-820, 2017-07-27 04:44:07)

Re: AHK : цикл при имитации зажатой кнопки

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

Rbutton не срабатывает при зажатой Lbutton (что с ahk что с макросом), но в самой игре (без скрипта и без макроса) при физически зажатой LB  клик на RB работает. Переназначение функции с RB на кнопку клавы не помогло.

"Что то вроде таймера, который сообщает системе через какое время надо вызвать в скрипте определённую функцию" - начиная с какого то момента (запуска скрипта наверное) + игнорирование при вызове этой функции других действий (таких как зажатие LB), значит надо прервать поток и вызвать функцию, и все это сделать в таймере. Это все связано с DllCall?

7

Re: AHK : цикл при имитации зажатой кнопки

serzh82saratov, вот, вопрос становится все популярнее .

8

Re: AHK : цикл при имитации зажатой кнопки

Rbutton не срабатывает при зажатой Lbutton

Hotkey -> опция *.

9

Re: AHK : цикл при имитации зажатой кнопки

Всем спасибо, скрипт написал в lua (api g-series). Тему можно закрывать.