1

Тема: AHK: Двойное срабатывание SendInput

Здравствуйте, коллеги!
В коде

Clipboard=vk56
MouseMove, A_CaretX, A_CaretY, 0
;Sleep 128 ;мало
SendInput {LButton}
;Sleep 4444
SendInput ^{vk56}
ClipWait
ExitApp
;∎vk56сюда курсор

происходит двойное срабатывание SendInput {LButton}, если запускать код часто, например, часто нажимая или зажав F5. Если запускать скрипт разово, то всё хорошо.
Смог исправить только установкой немалого, неск. секунд, Sleep после MouseMove.
1. Почему происходит двойное срабатывание?
2. Как победить, кроме длительного Sleep?
Спасибо.

2 (изменено: __Михаил__, 2024-01-27 00:59:05)

Re: AHK: Двойное срабатывание SendInput

concept.ru
Всё зависит от того как запускаете код. Советую почитать про команду KeyWait.

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

3

Re: AHK: Двойное срабатывание SendInput

concept.ru пишет:

часто нажимая или зажав F5.

У меня ничего не делат при нажатии F5, этот код не рабочий.

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

4

Re: AHK: Двойное срабатывание SendInput

__Михаил__, спасибо.
Вот только KeyWait здесь ни причём. Вот код без нажатий клавиш

Loop 32 {
	Sleep 128
	Clipboard=%i%""
	MouseMove, A_CaretX, A_CaretY, 0
	SendInput {LButton}
	SendInput ^{vk56}
	ClipWait 1
	i+=1
}
ExitApp
;курсор сюда

в котором происходит то же самое – двойное срабатывание SendInput {LButton}, если Sleep 128; и ожидаемое поведение при Sleep 1128.

5

Re: AHK: Двойное срабатывание SendInput

Этот код выдал мне следующее.

""1""2""3""4""5""6""7""8""9""10""11""12""13""14""15""16""17""18""19""20""21""22""23""24""25""26""27""28""29""30""31""

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

6

Re: AHK: Двойное срабатывание SendInput

Alectric, и мне при Sleep 1128. И совсем иное при Sleep 128.

7 (изменено: Alectric, 2024-01-27 16:17:45)

Re: AHK: Двойное срабатывание SendInput

Придется вставлять задержки после каждой клавиши.

Loop 32 {
  Clipboard=%i%""
  MouseMove, A_CaretX, A_CaretY, 0
  SendInput {LButton}
  sleep,1
  SendInput ^{vk56}
  sleep,1
  ClipWait 1
  i+=1
}
ExitApp
Справка пишет:

Действие SetKeyDelay не распространяется на SendInput, в этом режиме нет пауз между нажатиями. Это же верно для Send, если действует команда SendMode Input.
Короткая пауза вставляется автоматически после каждого нажатия, посылаемого командами Send или ControlSend. Это делается для повышения надёжности работы скриптов, поскольку окна иногда могут не успевать за быстрым потоком нажатий.

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

8 (изменено: concept.ru, 2024-01-27 16:30:50)

Re: AHK: Двойное срабатывание SendInput

Alectric, спасибо.
Но в том-то и вопрос, что задержки приходится ставить не понятно большие. На моём компьютере Sleep 512 мало, а это аж полсекунды.
А Ваш код, даже после изменения обоих Sleep'ов с 1 на 128, на моём компьютере так же работает не верно.

9

Re: AHK: Двойное срабатывание SendInput

Попробуй повысить приоритет программы в которую посылаются нажатия.

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

10

Re: AHK: Двойное срабатывание SendInput

Справка об A_CaretX, A_CaretY: При неоднократном считывании содержимого данной переменной на высокой скорости (т.е. каждые 500 мсек. или быстрее), возможность делать двойные щелчки мышью может быть нарушена. На данный момент не существует способов обойти эту проблему.
Оказалось, нарушены не только двойные щелчки.
Программирование на AHK напоминает радиолюбительское детство – подбор резисторов и конденсаторов, выставление рабочей точки транзистора подстроечниками. Причём у конденсатора ёмкость -20%…+80% от номинала (=подобранные Sleep окажутся нерабочими на другом компьютере).
Проще, наверное, перекодить проект на Питоне.

11

Re: AHK: Двойное срабатывание SendInput

Интересно, на AHK v2 исправили или нет?

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

12

Re: AHK: Двойное срабатывание SendInput

concept.ru пишет:

Программирование на AHK напоминает радиолюбительское детство

у меня в радиолюбительском детстве получалось быстрее, понятнее и надежней.  А в

concept.ru пишет:

Программирование на AHK

столько непонятных моментов происходит. Один и тот же код три раза подряд может выдавать разные результаты, а дальше стабилизируется. Как так...

13

Re: AHK: Двойное срабатывание SendInput

Почитал Changes & New Features для AHK v2, там дела ещё менее предсказуемы.

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

14

Re: AHK: Двойное срабатывание SendInput

concept.ru
А что делает ваш мудрёный код? И зачем каждую итерацию нужно определять положение каретки? Она у вас что, прыгает в разные части экрана?

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

15

Re: AHK: Двойное срабатывание SendInput

teadrinker, нужно возвращаться в ставшее неактивным окно в то же место.

16

Re: AHK: Двойное срабатывание SendInput

Просто активируйте окно с помощью WinActivate. Клик мышью для этого не нужен.

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

17

Re: AHK: Двойное срабатывание SendInput

teadrinker, остался вопрос такой: как я не смог догадаться до такого очевидного решения :-)

18

Re: AHK: Двойное срабатывание SendInput

Слишком зациклились на первом пришедшем в голову?

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

19 (изменено: concept.ru, 2024-01-27 20:24:25)

Re: AHK: Двойное срабатывание SendInput

teadrinker, видимо, так. День жизни потрачен впустую из-за несообразительности.

20

Re: AHK: Двойное срабатывание SendInput

concept.ru, Как гласит поговорка: правильно поставленный вопрос — это уже половина ответа.

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