Top.Mail.Ru
Ответы

Кто шарит за AHK(AutoHotKey) скрипты помогите

Привет! Есть скрипт, который ищет на экране пиксель заданного цвета и имитирует нажатие на ЛКМ (левая кнопка мыши). Как можно оптимизировать скрипт так что бы скорость нажатие на ЛКМ или поиск пикселя был максимально быстрым?


123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
 #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