Скорость сценария автоматической блокировки и предотвращение спама - PullRequest
1 голос
/ 10 марта 2019

Первый вопрос: Является ли этот скрипт настолько быстрым, насколько это возможно?

Я говорю о командах в начале, они нужны / ненужны? они помогают вообще, когда речь идет о простой переназначении ключей?

Мне бы хотелось, чтобы он работал как можно быстрее, поскольку я делаю довольно интенсивные и быстрые вещи с помощью этого сценария.

Второй вопрос: Как предотвратить спам-щелчок по этому сценарию?

Если я удержу нажатой клавишу «E» или «R», это приведет к щелчку спама, чего я не хочу.

Как это исправить?

#NoEnv
#MaxHotkeysPerInterval 99000000
#HotkeyInterval 99000000
#KeyHistory 0
ListLines Off
Process, Priority, , A
SetBatchLines, -1
SetKeyDelay, -1, -1
SetMouseDelay, -1
SetDefaultMouseSpeed, 0
SetWinDelay, -1
SetControlDelay, -1
SendMode Input

*e::Click
return

*r::Click
return

Ins::Suspend
return

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Ответ на первый вопрос , похоже, вы могли получить строки заголовка отсюда: Как максимально оптимизировать скорость скрипта .Пост объясняет каждую строку (см. Ниже) и даже включает в себя некоторые тесты для других вещей.

В вашем случае, если вы делаете только перераспределение клавиш, вероятно, не стоит включать какие-либо из этих строк за исключениемSendMode , Input, так как это самый надежный режим отправки.Вы упоминаете, что делали "довольно интенсивные и быстрые вещи с этим сценарием";что именно это означает, будет точно определять, нужны ли строки заголовка.

Примечания

1. #NoEnv рекомендуется для всех сценариев, он отключает переменные среды.

2. Значение по умолчанию #MaxHotkeysPerInterval вместе с #HotkeyInterval остановит ваш скрипт, показывая окна сообщений, если в нем есть какой-то быстрый цикл автозапуска.Просто задайте какое-нибудь безумное недостижимое большое число, чтобы игнорировать этот предел.

3. ListLines и #KeyHistory - функции, используемые для «регистрации ваших ключей».Отключите их, поскольку они полезны только для целей отладки.

4. Установка более высокого приоритета для программы Windows должна повысить ее производительность.Используйте AboveNormal / A.Если вам кажется, что ситуация ухудшается, прокомментируйте или удалите эту строку.

5. Значение SetBatchLines по умолчанию заставляет ваш скрипт спать 10 миллисекунд каждую строку.Сделайте это -1, чтобы не спать (но не забудьте включить по крайней мере один Sleep в ваши циклы, если они есть!)

6. Даже если SendInput игнорирует SetKeyDelay, SetMouseDelay и SetDefaultMouseSpeed, имея этизадержка в -1 повышает скорость SendEvent на тот случай, если SendInput недоступен и возвращается к SendEvent.

7. SetWinDelay и SetControlDelay могут повлиять на производительность в зависимости от сценария.

8. SendInput - самый быстрый метод отправки.SendEvent (по умолчанию) - 2-е место, SendPlay - 3-е место (хотя это самое совместимое).SendInput не подчиняется SetKeyDelay, SetMouseDelay, SetDefaultMouseSpeed;в этом режиме нет задержки между нажатиями клавиш.

9. Если вы не используете SetTimer, функция сна высокой точности полезна, когда вам нужна надежность в миллисекундах в ваших скриптах.Это может быть проблематично при использовании с SetTimer в некоторых ситуациях, потому что этот метод сна приостанавливает весь сценарий.Чтобы использовать это, вот пример, который ждет 16,67 миллисекунды: DllCall("Sleep",UInt,16.67)

10. При использовании PixelSearch для сканирования одного пикселя одного цветового варианта, неиспользуйте параметр Fast.Согласно моим оценкам, в этом случае обычный PixelSearch работает быстрее, чем PixelSearch Fast.

11. Согласно документации (этот текст находится в установочном файле), Unicode x64bit версияAHK быстрее, используйте его, когда доступно.

2 голосов
/ 11 марта 2019

Ответ на второй вопрос , добавьте команду KeyWait к вашим горячим клавишам, KeyWait - Синтаксис и использование | AutoHotkey

*e::
Click
KeyWait, e
return

*r::
Click
KeyWait, r
return
...