Что нового

PixelGetColor медленно работает

HmTH

Новичок
Сообщения
2
Репутация
0
Добрый день.
Существует такой скрипт

Код:
$winList = WinList("programm")
While 1
    For $i = 1 to $winList[0][0]

        $title = $winList[$i][0]
        $handle = $winList[$i][1]
        $controlid = ""
        $text = ""

        $check_round = PixelGetColor(1857, 1028, $handle)
        If $check_round = "0x250307" Then
            ControlSend($handle,$text,$controlid,"{SPACE}")
            ControlSend($handle,$text,$controlid,"{0}")
        EndIf

        $check_round = PixelGetColor(1857, 828, $handle)
        If $check_round = "0x604D2A" Then
            ControlSend($handle,$text,$controlid,"{SPACE}")
            ControlSend($handle,$text,$controlid,"{0}")
        EndIf

        $check_round = PixelGetColor(1854, 635, $handle)
        If $check_round = "0x52402C" Then
            ControlSend($handle,$text,$controlid,"{SPACE}")
            ControlSend($handle,$text,$controlid,"{0}")
        EndIf

        $check_round = PixelGetColor(1858, 440, $handle)
        If $check_round = "0x150805" Then
            ControlSend($handle,$text,$controlid,"{SPACE}")
            ControlSend($handle,$text,$controlid,"{0}")
        EndIf

    Next
WEnd


Проблема в том, что функция PixelGetColor срабатывает только где-то через 0,5-1 сек. Ну, то есть либо сама функция, либо условие сравнения.
Задача скрипта в том, что на рабочем столе есть 4 открытых окна, и если в каком-то из них появляется нужный пиксель по указанным координатам, то отправлять нажатие указанных клавиш.
Всё работает хорошо, но есть небольшое но. Очень долго скрипт "понимает" есть ли нужный пиксель в указанных координатах.
По-сути появляется всплывающее окно время от времени в одном из открытых клиентов программы. И надо нажимать определенную кнопку, если в одной из программ это окно появляется. После чего это окно исчезает.
Проблема в том, что я это окно могу наблюдать около секунды, хотя для меня очень важно опрежать моих конкурентов и нажимать эту кнопку первым. В итоге часто бывает так, что меня опережают.
Можно ли как-то оптимизировать скрипт так, чтобы я даже зрительно не успевал увидеть того, что это окно вообще появлялось? Сейчас оно появляется и я даже успеваю что-то прочитать и понять, прежде чем команда нажатия клавиши отправится.

P.S.

Я много гуглил на эту тему, но внятного ответа не нашел. Либо ответы 2011-го года, которые не актуальны, либо что-то непонятное, либо не рабочее. Что есть на данный момент?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Если появляется всплывающее окно, то попробуйте ловить это окно через WinExist и работать с ним.
Например при закрытии блокнота на вопрос сохранять или нет сразу нажать отмена:
Код:
While 1
    If WinExists("Блокнот", "Со&хранить") Then
        ControlClick("Блокнот", "Со&хранить", "[CLASS:Button; INSTANCE:3]", "left", 1)
        MsgBox(0, "", "")
    EndIf
    Sleep(100)
WEnd
 
Автор
H

HmTH

Новичок
Сообщения
2
Репутация
0
Если появляется всплывающее окно, то попробуйте ловить это окно через WinExist и работать с ним.
Например при закрытии блокнота на вопрос сохранять или нет сразу нажать отмена:
Код:
While 1
    If WinExists("Блокнот", "Со&хранить") Then
        ControlClick("Блокнот", "Со&хранить", "[CLASS:Button; INSTANCE:3]", "left", 1)
        MsgBox(0, "", "")
    EndIf
    Sleep(100)
WEnd
К сожалению, такой вариант не подходит. AutoIT Window Info не видит практически никакой инфы. Есть ли другие варианты? Может более ускоренные функции для проверки конкретно по координатам?
 
Верх