1

Тема: AHK: Функции "SendPlay" и "Click".

Здравствуйте. Пишу простенький скрипт, который производит несколько нажатий мышью в меню игры. Выглядит он примерно так:


#HotkeyInterval 0
#InstallKeybdHook
#InstallMouseHook
SetBatchLines, -1
SetKeyDelay , 20, -1, Play //поставил задержку, т.к. игра не
SetMouseDelay , 20, Play  //успевает реагировать без неё

*vk44::
MouseGetPos, xpos, ypos
SendPlay, {vk43}{vk46}{Click 140, 600}{Click 670, 730}{Click 470, 460}{Click 730, 730}{Click 420, 460}{Click 790, 730}{vk43}{Click 370, 570}{Click 850, 730}
MouseMove, %xpos%, %ypos%
SendPlay, {vk1b}
Return

Проблема заключается в том, что примерно раз в 10 запусков наблюдается следующая картина: выполняется несколько кликов, после чего скрипт "зависает", т.е. не все клики успевают выполнится. Для того, чтобы он продолжил их выполнять, необходимо нажать какую-либо клавишу или пошевелить мышью. Я плохо разбираюсь в сообщениях, но предполагаю, что сообщения, создаваемые скриптом, имеют "низкий приоритет", что ли, и windows начинает обрабатывать что-нибудь другое, "забывая" про оставшиеся необработанные клики. Или windows ждёт, пока в очереди накопятся задачи, чтобы сразу их выполнить. Тогда нужно что-то вроде Application.ProcessMessages();

Прошу вашей помощи в исправлении этого ляпсуса!

2 (изменено: serzh82saratov, 2013-03-08 17:16:45)

Re: AHK: Функции "SendPlay" и "Click".

Попробуйте так:

#MaxThreadsPerHotkey 1
#MaxThreadsBuffer On ; если надо чтобы каждое нажатие vk44 в дальнейшем было отработано
#InstallKeybdHook
#InstallMouseHook
#UseHook
SetBatchLines, -1
Process, priority, , High ; можно ещё по пробовать Realtime вместо High
SetKeyDelay , 20, -1, Play //поставил задержку, т.к. игра не
SetMouseDelay , 20, Play  //успевает реагировать без неё

*vk44::
MouseGetPos, xpos, ypos
SendPlay, {vk43}{vk46}{Click 140, 600}{Click 670, 730}{Click 470, 460}{Click 730, 730}{Click 420, 460}{Click 790, 730}{vk43}{Click 370, 570}{Click 850, 730}
MouseMove, %xpos%, %ypos%
SendPlay, {vk1b}
Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Функции "SendPlay" и "Click".

Спасибо за попытку помочь, но, к сожалению, не помогли ваши изменения. На счёт "MaxThreadsPerHotkey": в справке написано, что для горячих клавиш используется значение по умолчанию, равное 1.
После внесения  "Process, priority,  , Realtime", вроде бы, зависания стали происходить чуточку реже, но точно сказать нельзя. Улучшения слишком незначительны. В чём может быть проблема ?