Кто шарит за AHK(AutoHotKey) скрипты помогите
Привет! Есть скрипт, который ищет на экране пиксель заданного цвета и имитирует нажатие на ЛКМ (левая кнопка мыши). Как можно оптимизировать скрипт так что бы скорость нажатие на ЛКМ или поиск пикселя был максимально быстрым?
#NoEnv
#Persistent
#MaxThreadsPerHotkey 2
#KeyHistory 0
ListLines Off
SetBatchLines, -1
SetKeyDelay, -1, -1
SetMouseDelay, -1
SetDefaultMouseSpeed, 0
SetWinDelay, -1
SetControlDelay, -1
SendMode Input
CoordMode, Pixel, Screen
; HOTKEYS
key_hold_mode := "5"
key_exit := "End"
key_hold := "alt"
; SETTINGS
global pixel_box := 4 ; Keep between min 3 and max 8
global pixel_sens := 60 ; higher/lower = more/less color sensitive
global pixel_color := 0xFF57FF ;0xA1453 ; yellow="0xFEFE40", purple="0xA1453"
global tap_time := 1 ; Delay in ms between shots when triggered
leftbound := 1280 / 2 - pixel_box
rightbound := 1280 / 2 + pixel_box
topbound := 720 / 2 - pixel_box
bottombound := 720 / 2 + pixel_box
hotkey, %key_hold_mode%, holdmode_on
hotkey, %key_exit%, terminate
return
start:
; Add a beep command when the program starts
SoundBeep, 500, 1000
return
terminate:
SoundPlay off
; Add a beep command when the program terminates
SoundBeep, 500, 500
Sleep 400
exitapp
return
holdmode_on:
; Add a beep command when the home button is pressed
SoundPlay, C:\Windows\Media\chimes.wav
settimer, loop2, 1
return
loop2:
While GetKeyState(key_hold, "P"){
PixelSearch()
Sleep 0 ; Add a delay to reduce CPU usage
}
return
PixelSearch() {
global pixel_box, pixel_sens, pixel_color, tap_time
global FoundX, FoundY, leftbound, topbound, rightbound, bottombound
PixelSearch, FoundX, FoundY, leftbound, topbound, rightbound, bottombound, pixel_color, pixel_sens, Fast RGB
If !(ErrorLevel)
{
If !GetKeyState("LButton")
{
click
sleep %tap_time%
}
}
return
}
Это
PixelSearch, FoundX, FoundY, lef
вроде стандартная функция.
Но цикл вызывать каждую миллисекунду
settimer, loop2, 1
перебор, он и найти а это время не сможет.
Ну и тут
loop2:
While GetKeyState(key_hold, "P"){
PixelSearch()
Sleep 0 ; Add a delay to reduce CPU usage
}
пока нажата клавиша то каждый раз искать но зачем, если ничего не сменилось на экране? Допустим у тебя 50 кадров в секунду, тогда это 20 мс на кадр и что каждый раз тупо искать и загружать проц?
Вообще эти слипы в 1 мс маловероятны
global tap_time := 1 ; Delay in ms between shots when triggered
скорее всего ОС даст вам 10 мс на обработку.
Так что тут что-то не так сделано...да и не знаю скорости работы функции PixelSearch, FoundX, FoundY
Если логирование сделать в файл и скидывать со временем, может и будет ясно. Но что-то вы очень много хотите анализировать, скорее всего хотите быструю реакцию? Если да, то скорость важна конечно, а если хотя бы 1/5 секунды, то зачем кучу раз вызывать таймер по
settimer, loop2, 1