Некоторые проблемы с ответами с использованием двух сценариев «последовательности клавиш» в Autohotkey

У меня есть два сценария в AHK, оба вызваны «ключевыми последовательностями» (b нажаты два раза) и (1 нажата дважды), вот код

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. SetTitleMatchMode RegEx ; matchs apps windows names using RegEx ; Delay A between key sequence triggers ARkeySeqDelayA := 250 ; if Presets Panel is in 100% ; Y axis top in tool presets is 122 pixels ; Y axis gap between tool presets is 29 pixels ARtoolPresetTopY := 125 ARtoolPresetGapY := 29 return #If WinActive("ahk_class ArtRage 3") b:: if Keyb_presses > 0 ; SetTimer already started, so we log the keypress instead. { Keyb_presses += 1 return } ; Otherwise, this is the first press of a new series. Set count to 1 and start ; the timer: Keyb_presses = 1 SetTimer, Keyb, -250 ; Wait for more presses within a 250 millisecond window. return Keyb: if Keyb_presses = 1 ; The key was pressed once. { BlockInput, MouseMove Send {b} sleep 80 MouseClick, left, 195, 55 Sleep 200 MouseClick, left, 200, 85 BlockInput, MouseMoveOff } else if Keyb_presses = 2 ; The key was pressed twice. { BlockInput, MouseMove Send {b} sleep 80 MouseClick, left, 195, 55 Sleep 200 MouseClick, left, 200, 110 BlockInput, MouseMoveOff } ; Regardless of which action above was triggered, reset the count to ; prepare for the next series of presses: Keyb_presses = 0 return 1:: if Key1_presses > 0 ; SetTimer already started, so we log the keypress instead. { Key1_presses += 1 return } ; Otherwise, this is the first press of a new series. Set count to 1 and start ; the timer: Key1_presses = 1 SetTimer, Key1, -250 ; Wait for more presses within a 250 millisecond window. return Key1: if Key1_presses = 1 ; The key was pressed once. { BlockInput, MouseMove MouseClick, left, 13, ARtoolPresetTopY BlockInput, MouseMoveOff } else if Key1_presses = 2 ; The key was pressed twice. { BlockInput, MouseMove MouseClick, left, 13, ARtoolPresetTopY + (ARtoolPresetGapY * 8) BlockInput, MouseMoveOff } ; Regardless of which action above was triggered, reset the count to ; prepare for the next series of presses: Key1_presses = 0 return 

Но почему-то, когда я запускаю сценарий «1», а затем через несколько секунд я хочу использовать сценарий «11», он не будет работать, если я не щелкнул где-нибудь ранее (вручную), похоже, что предыдущий скрипт AHK как-то все еще И мне нужно закончить его, щелкнув меня где угодно.

Кроме того, когда я запускаю сценарий «bb», а затем через 1 секунду я хочу использовать «1» скрипт, он не будет работать, снова кажется, что каким-то образом AHK все еще запускает скрипт previuos или что-то еще, и мне нужно сделать Нажмите «Я», а затем только тогда будет работать сценарий «1». Поэтому я не могу запускать сценарии «bb» и «1» один за другим (что я всегда делаю, очень важно), без меня мне приходится делать какие-то mouseclicks между ними, как я могу избежать этого?

После дальнейшего тестирования я заменяю все исполняемые части скрипта просто

 Run C:\Users\myname\Desktop\AR4 bb.exe ; the same script done in a macro recorder click up left 

И я заметил, что проблема сохраняется, так же, как делает сценарий, дифференцируя однократные и двойные нажатия клавиш, которые мешают скрипту запускаться два раза подряд. Если я нажму «b», подождите одну секунду, но не делайте мышь одним щелчком мыши и нажмите «bb» (b два раза), он выполнит «b», но если раньше я делал некоторые mouseclicks от myselft, Выполнит «bb». Почему это происходит?

что я могу сделать?? Есть ли какая-то команда, которую я мог бы добавить, чтобы сделать этот скрипт более отзывчивым?

Спасибо.

    Чтобы контролировать, будет ли щелчок мышью правой позиции в правом окне, вы можете использовать это:

     F1:: ARtoolPresetTopY := 125 ARtoolPresetGapY := 29 Ypos := ARtoolPresetTopY + (ARtoolPresetGapY * 8) MsgBox, %Ypos% ; Press Enter for closing this MsgBox. ; Click, 13, %Ypos% ; or ControlClick, x13 y%Ypos%, ahk_class ArtRage 3 MouseMove, 13, %Ypos%, 0 ; this line is only needed for getting the mouse position and the name of the control you want click: MouseGetPos, MouseX, MouseY, WindowUnderMouse, ControlUnderMouse WinGetTitle, title, ahk_id %WindowUnderMouse% WinGetClass, class, ahk_id %WindowUnderMouse% MsgBox, MouseX = %MouseX%`nMouseY = %MouseY%`n`nWinTitle = %title%`nWinClass = ahk_class %class%`n`nControlUnderMouse = %ControlUnderMouse% return 
    • Вместо Click вы можете использовать ControlClick (тогда вам не нужен BlockInput).

    • Попробуйте также заменить «b ::» и «1 ::» на « $ b :: » и « $ 1 :: ». (Ключи для клавиатуры всегда имеют приоритет).

    • См. Также: Отладка сценария .

    Давайте будем гением компьютера.