Другие языки программирования и технологии

Эксперты по ахк, помогите, пожалуйста

На первый взгляд я думал всё будет очень легко, но оказалось что нет ( Мне всего то нужно что бы при появлении пикселя на экране, определённого цвета само собой, скрипт делал один клик левой кнопкой мыши, но что то пошло не так. Скрипт делал какую то дичь, нажимал когда не надо или вообще не нажимал. Короче при появлении пикселя на координатах X560, Y360, (437b1b цвета), нажимался лмк. Вот скрипт, кто шарит скажите, что не так и как это исправить что бы оно работало.

*~$XButton1::
while GetKeyState("XButton1", "P")
{
PixelSearch, Px, Py, 560, 560, 360, 360, 0x437b1b, 3, Fast
mouseclick, left,,, 1
}
return

Заранее благодарю.
PixelSearch возвращает значение его и проверяй
СЧ
Сергей Чередниченко
7 362
Лучший ответ
Рустам Аканов PixelGetColor ставить?
Сергей Чередниченко if ErrorLevel
{
mouseclick, left,,, 1
}
Сергей Чередниченко если пиксель найден
Сергей Чередниченко не найден, наоборот, перепутал
Сергей Чередниченко PixelSearch, Px, Py, 200, 200, 300, 300, 0x9d6346, 3, Fast
if ErrorLevel
Не найден пиксель
else
найден
Сергей Чередниченко немного не понятно, что точно надо, но вот примерно такое. Вообще пикселей много и ложных срабатываний будет много, у тебя нет координат кликанья в ту область, где пиксель найден. Вот поставь свои координаты и проверь

CoordMode, Pixel, Relative
CoordMode, Mouse, Relative

*~$XButton1::
Loop {
PixelSearch, PX, PY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, 0x00FF00, 0, fast
if(ErrorLevel=0)
{
MouseClick, left, %PX%, %PY%
}
else {

PixelSearch, PX, PY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, 0x00FF00, 0, fast
}
}
return

End::ExitApp
Сергей Чередниченко PixelSearch, Px, Py, 560, 560, 360, 360, 0x437b1b, 3, Fast неправильные координаты проверь получше, x1.y1 x2 y2 утебя 560 560 360 360 неверно
Сергей Чередниченко PX, PY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight% так он ищет от начала верхнего левого угла на всю площадь экрана
Рустам Аканов что-то я запутался, мне сделать
PixelSearch, Px, Py, 560, 570, 360, 370, 0x437b1b, 3, Fast ???
или что, мне нужно что бы приблизительно в том месте искал
Сергей Чередниченко 560, 570, 360, 370, первое значение это верх треугольника поиска то есть x начало допустим x=30 с верхнего левого далее второе значение по вертикали y1 допустим 30 это почти верхний левый угол эерана, и далее идет смещение в большую сторону а не в меньшую как у тебя x2 = 150 y2 = 250 допустим и вот унас прямоугольник поиска
Сергей Чередниченко скачай прогу Loupe я ей пользуюсь мне нравится и там все увидишь какие координаты экрана она показывает и высчитаешь какой надо
Сергей Чередниченко она также показывает цвет пикселя, который ты будешь искать
Сергей Чередниченко Да так, будет медленнее, и я неправильно сказал, именно прямоугольник, не треугольник.
while GetKeyState("XButton1", "P") это же условие не поиска пикселя
Используй ErrorLevel

А так вот мой скрипт
Работает очень просто зажимаешь Xb1 - Выделяешь область поиска
Xb2 - Выбираешь цвет на экране
F3 - Запускает
F4 - Break
Скрипт

Msgbox,,Инструкция, Xbutton1 - GetColor`nXbutton2 - SelectPos`n F3 - start`n F4 - Стоп

#SingleInstance Force
#NoEnv
#WinactivateForce
SetWorkingDir %A_ScriptDir%
SetBatchLines -1

Gui +AlwaysOnTop +OwnDialogs -Theme -Caption
Gui Color, 0xFF8000
Gui Show, w0 h0, Select
Winset,Transparent,50,Select
Return
xbutton1::
sleep 5
MouseGetpos x7,y7,id,control
Wingettitle,title,ahk_id %id%
winactivate,%title%
Loop
{
GetKeyState,xb,xbutton1,P
if xb = U
Break
MouseGetpos x1,y1
CoordMode,Pixel,Relative
PixelGetColor,color,x1,y1,RGB
Tooltip,Color = %color%`
sleep 33
}
color1 = %color%
Tooltip
return

xbutton2::
sleep 5
CoorDmode,Mouse,Screen
MouseGetpos x,y,id,control
Wingettitle,title,ahk_id %id%
winactivate,%title%
Loop
{
GetKeyState xb2,xbutton2,P
if xb2 = U
Break
CoorDmode,Mouse,Screen
MouseGetpos x3,y3
Tooltip,% abs(x-x3) "x" abs(y-y3)
Winmove,Select,,% x, y, abs(x-x3) , abs(y-y3)
}
Tooltip
x = %x%
y = %y%
x3 = %x3%
y3 = %y3%
WinMove,Select,,0,0,0,0
return

f3::
state:=1
MouseGetpos x6,y7,id,control
Wingettitle,title,ahk_id %id%
winactivate,%title%
CoordMOde,Mouse,Relative
Loop
{
if (state = 1)
{
CoordMOde,Mouse,Relative
PixelSearch, Px, Py, %x%, %y%, %x3%, %y3%, %color1%, 3,Fast RGB
if (ErrorLevel = 0)
{
Tooltip, Цвет найден по координатам %Px% %Py%
CoordMOde,Mouse,Relative
MouseMove,%Px%,%Py%,0
}
else if (ErrorLevel = 1)
{
Tooltip,Такого цвета не найденно
}
}
else if (state = 2)
{
Break
}
}
Tooltip,
return

f4::
state:=2
return

GuiEscape:
GuiClose:
ExitApp
Andrei Chebodaev А можно как-то в вашем коде увеличить область поиска? Я запустил ахк с этим кодом, и поиск проходит в 10-30 пикселях от курсора во все сторона.
Serge Zybin Здравствуйте , а как в вашем коде изменить так , что бы при найденном пикселе прожималась клавиша к примеру "E" ?