Что нового

Как по цвету пикселя задать нажатие кнопки мыши в определённой области экрана

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
Добрый день/утро/вечер.
Так как я совсем новичок я столкнулся с одной проблемой! (или кучей)
Я пытался что то слепить используя AutoIt, но так ничего у меня и не вышло...
А пытался я сделать некий бот, который завидев по центру экрана (в определённой области по центру экрана) определённый цвет жал лкм...
Но так у меня ничего и не вышло...
И ещё 1 немало важная вещь - цвет пикселя там далеко не 1...
Просьба помочь слепить мне эту чудо программку!!!
Так же вот тут я попробую выложить некую ерунду что я делал но толку от этого я не получил...
Код:
HotKeySet("{F6}","_Exit")
While 1
$Variable = PixelSearch(956,546,965,552,0xCF3429)
If IsArray($Variable) = True Then
MouseClick("LEFT")
EndIf
WEnd
Func _Exit()
Exit
EndFuncHotKeySet("{F6}","_Exit")
While 1
$Variable = PixelSearch(956,546,965,552,0xC03459)
If IsArray($Variable) = True Then
MouseClick("LEFT")
EndIf
WEnd
Func _Exit()
Exit
EndFunc


таких вот копирующихся надписей там около 20 и более и всё ради цвета пикселя но там же я встретился с ошибкой Duplicate function name.
Надеюсь на вашу помощь.
Версия AutoIt 3.3.12.0
 

КашаК

Новичок
Сообщения
15
Репутация
0
Вот похожая тема.
http://autoit-script.ru/index.php?topic=1386.0

Сообщение от Гарета, я закоментил "лишнее" из его скрипт, получилось такое.
Код:
HotKeySet ( "{ESC}" ,"_Exit")

While 1
    $p1 = PixelSearch( 160, 240, 200, 270, 0xFF8800) ; Orange
    If @error Then $p1 = @error
    $p2 = PixelSearch( 0, 0, 900,  900, 0x4C1B18, 0, 1) ;  Green
    If @error Then $p2 = @error

    If $p1 <> 1 And $p2 <> 1 Then
       ; Beep(1000,100)
        ;ToolTip("   Click! ", $p1[0], $p1[1])
        MouseClick("left", $p1[0], $p1[1], 2, 5)
       ; MsgBox(0,"","Пиксель P1 найден!")
       ; Beep(1000,100)
       ; ToolTip("   Click! ", $p2[0], $p2[1])
        MouseClick("left", $p2[0], $p2[1], 2, 5)
       ; MsgBox(0,"","Пиксель P2 найден!")
    ElseIf $p1 <> 1 Then
        ;;Beep(1000,100)
        ;ToolTip("   Click! ", $p1[0], $p1[1])
        MouseClick("left", $p1[0], $p1[1], 2, 5)
        ;MsgBox(0,"","Пиксель P1 найден!")
    ElseIf $p2 <> 1 Then
        ;Beep(1000,100)
       ; ToolTip("   Click! ", $p2[0], $p2[1])
        MouseClick("left", $p2[0], $p2[1], 2, 5)
       ; MsgBox(0,"","Пиксель P2 найден!")
    Else
       ; MsgBox(0,"","Ничего не найдено!")
        Exit
    EndIf

WEnd


Func _Exit()
    Exit
EndFunc


Так же обрати внимание на "shade-variation" в поиске цвета, разница насколько я ыижу у тебя не большая. может стоит увеличить разброс?
 
Автор
R

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
Мммм так как я совсем недавно в AutoIt, не могли бы вы немножко поянить мне что да как...
Код:
HotKeySet ( "{ESC}" ,"_Exit")

While 1
    $p1 = PixelSearch( 160, 240, 200, 270, 0xFF8800) ; Orange  где x/y x/y - координаты в нашем случаи 160,240, 200, 270.  и где 0xFF8800 цвет пикселя Orange в этом случаи. Я же буду вставлять свои которые близки к 1 цвету - красному. И буду делать примерно так:

 $p1 = PixelSearch( 160, 240, 200, 270, 0х000000 ; Orange
    If @error Then $p1 = @error
    $p2 = PixelSearch( 0, 0, 900,  900, 0х000000, 0, 1) ;  Green
    If @error Then $p2 = @error
    $p3 = PixelSearch( 160, 240, 200, 270, 0х000000) ; Orange
    If @error Then $p3 = @error
    $p4 = PixelSearch( 0, 0, 900,  900, 0х000000, 0, 1) ;  Green
    If @error Then $p4 = @error
    $p5 = PixelSearch( 160, 240, 200, 270, 0х000000) ; Orange
    If @error Then $p5 = @error
------------------------------------------------------------------------------
Далее я встретил ещё 1 непонятность, а именно эту часть её я выделю красным цветом

    If @error Then $p1 = @error
    $p2 = PixelSearch( 0, 0, 900,  900, 0xFF8800, [color=red][SIZE=24px][font=times new roman]0, 1[/font][/SIZE][/color]) ;  Green
    If @error Then $p2 = @error
----------------------------------------------------------------------
Далее я вообще запутался...


    If $p1 <> 1 And $p2 <> 1 Then
       ; Beep(1000,100)                                    - тут я вообще ни чего не понимаю... Что за сигнал:? и что значит (1000,100) ?
        ;ToolTip("   Click! ", $p1[0], $p1[1])         - тут тоже не понимаю ... что ещё за подсказка....
        MouseClick("left", $p1[0], $p1[1], 2, 5)    - ну тут ясно что клик левой кнопкой мышки но вот что это ?  $p1[0], $p1[1], 2, 5 ?
       ; MsgBox(0,"","Пиксель P1 найден!")        - и тут я не знаю  :o
       ; Beep(1000,100)                                     - ну тут всё заново...
       ; ToolTip("   Click! ", $p2[0], $p2[1])
        MouseClick("left", $p2[0], $p2[1], 2, 5) 
       ; MsgBox(0,"","Пиксель P2 найден!")
    ElseIf $p1 <> 1 Then                                   а тут вообще всё плачевно...     вот например что это (<>) значит я не в курсах...
         ;;Beep(1000,100)
        ;ToolTip("   Click! ", $p1[0], $p1[1])
        MouseClick("left", $p1[0], $p1[1], 2, 5)
        ;MsgBox(0,"","Пиксель P1 найден!")
    ElseIf $p2 <> 1 Then
        ;Beep(1000,100)
       ; ToolTip("   Click! ", $p2[0], $p2[1])
        MouseClick("left", $p2[0], $p2[1], 2, 5)
       ; MsgBox(0,"","Пиксель P2 найден!")
    Else
       ; MsgBox(0,"","Ничего не найдено!")
        Exit
    EndIf

WEnd


Func _Exit()
    Exit
EndFunc

Ну думаю большую часть того что я не понял я тут показал...
Просьба помочь и объяснить что к чему :beer:
 

КашаК

Новичок
Сообщения
15
Репутация
0
PixelSearch ( left, top, right, bottom, color [, shade-variation = 0 [, step = 1 [, hwnd ]]] )
http://autoit-script.ru/autoit3_docs/functions/PixelSearch.htm Справка по данной функции.

По непонятности: 0 - означает что только точное совпадение. 1 - что просматриваеться каждый пиксель. (это необязательные параметры, больше инфы в справке выше.)
_______________________________________________________

Сигналы и подсказки. я закоментил. так как пример взял из другой темы (это можно смело удалять)

Код:
HotKeySet ( "{ESC}" ,"_Exit")

While 1
    $p1 = PixelSearch( 160, 240, 200, 270, 0xFF8800) ; Orange
		If @error Then $p1 = @error
    $p2 = PixelSearch( 0, 0, 900,  900, 0xFF8800) ;  Green
		If @error Then $p2 = @error
    $p3 = PixelSearch( 160, 240, 200, 270, 0xFF8800) ; Orange
		If @error Then $p3 = @error
    $p4 = PixelSearch( 0, 0, 900,  900, 0xFF8800) ;  Green
		If @error Then $p4 = @error
    $p5 = PixelSearch( 160, 240, 200, 270, 0xFF8800) ; Orange
		If @error Then $p5 = @error

    If $p1 <> 1 And $p2 <> 1 Then ;Если 1цвет и 2цвет равны 1(правда) то
         MouseClick("left", $p1[0], $p1[1], 2, 5) ;нажимаем первый цвет и второй
		 MouseClick("left", $p2[0], $p2[1], 2, 5) ; 0 и 1 это запомненые координаты цветов (куда жать) 2-количество кликов, 5-скорость перемещения
	ElseIf $p1 <> 1 Then 		  ; если 1цвет равен правде то жамкаеться на него
         MouseClick("left", $p1[0], $p1[1], 2, 5)
    ElseIf $p2 <> 1 Then
        MouseClick("left", $p2[0], $p2[1], 2, 5)
    Else
        Exit
    EndIf

WEnd


Func _Exit()
    Exit
EndFunc

Справка по кликам мыши.
http://autoit-script.ru/autoit3_docs/functions/MouseClick.htm

(Если навести на функцию в коде (и появилась рука), то по нажатию тебя перенесет в русскую справку)
 
Автор
R

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
ВЫ мне уже очень помогли!!!!
Но у меня появилась некая дилема...
Мой чудо бот ищет пиксель но когда я сменил область описка в программе она не стала запускаться вообще...
вот что вышло...
+ можно ли как нибудь поставить паузу в скрите?
Код:
HotKeySet ( "{6}" ,"_Exit")

While 1
    $p1 = PixelSearch( 790, 442, 808, 458, 0xD71E1F, 20)
        If @error Then $p1 = @error
    $p2 = PixelSearch( 790, 442, 808, 458, 0xD7201F, 20)
        If @error Then $p2 = @error
    $p3 = PixelSearch( 790, 442, 808, 458, 0xD71F1F, 20)
        If @error Then $p3 = @error
    $p4 = PixelSearch( 790, 442, 808, 458, 0xD72832, 20)
        If @error Then $p4 = @error
    $p5 = PixelSearch( 790, 442, 808, 458, 0xD72B37, 20)
        If @error Then $p5 = @error

    If $p1 <> 1 And $p2 <> 1 And $p3 <> 1 And $p4 <> 1 And $p5 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 25)
         MouseClick("left", $p2[0], $p2[1], 1, 25)
         MouseClick("left", $p3[0], $p3[1], 1, 25)
         MouseClick("left", $p4[0], $p4[1], 1, 25)
         MouseClick("left", $p5[0], $p5[1], 1, 25)
    ElseIf $p1 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 25)
    ElseIf $p2 <> 1 Then
        MouseClick("left", $p2[0], $p2[1], 1, 25)
    ElseIf $p3 <> 1 Then
        MouseClick("left", $p3[0], $p2[1], 1, 25)
    ElseIf $p4 <> 1 Then
        MouseClick("left", $p4[0], $p2[1], 1, 25)
    ElseIf $p5 <> 1 Then
        MouseClick("left", $p5[0], $p2[1], 1, 25)
    Else
        Exit
    EndIf

WEnd


Func _Exit()
    Exit
EndFunc


Добавлено:
Сообщение автоматически объединено:

Однако я встретился ещё с 1 проблемой...
Чудо программа не хочет работать непосредственно в игре... Просто не реагирует вообще...
А вот если её свернуть но на рабочем столе клякает по красненьким ярлыкам...
Не знаю что и делать то...


Добавлено:
Сообщение автоматически объединено:

Код:
HotKeySet ( "{7}" ,"_Exit")
HotKeySet ( "{6}" , "TogglePause")

While 1
    $p1 = PixelSearch( 160, 240, 200, 270, 0xD71E1F, 20)
        If @error Then $p1 = @error
    $p2 = PixelSearch( 0, 0, 900,  900, 0xD7201F, 20)
        If @error Then $p2 = @error
    $p3 = PixelSearch( 160, 240, 200, 270, 0xD71F1F, 20)
        If @error Then $p3 = @error

    If $p1 <> 1 And $p2 <> 1 And $p3 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 2, 15)
         MouseClick("left", $p2[0], $p2[1], 2, 15)
		 MouseClick("left", $p3[0], $p3[1], 2, 15)
    ElseIf $p1 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 2, 15)
    ElseIf $p2 <> 1 Then
        MouseClick("left", $p2[0], $p2[1], 2, 15)
	 ElseIf $p3 <> 1 Then
		MouseClick("left", $p3[0], $p3[1], 2, 15)
    Else
        Exit
    EndIf

WEnd


Func _Exit()
    Exit
EndFunc
это на весь экран вроде как :3


Добавлено:
Сообщение автоматически объединено:

P.S. пауза не вкл... :shok: :stars: :'(
 

КашаК

Новичок
Сообщения
15
Репутация
0
1. программа работает. но не находит не чего.
Чтоб не путаться можно вставить:
Код:
MouseClick("left", $p5[0], $p2[1], 1, 25)
	 Else
		  MsgBox(0,"","Ничего не найдено!")
        Exit
    EndIf



2. Я к сожалению не смог распознать данные цвета "0:rofl:71E1F".


Увеличив размер поиска и вставив цвета от сюда http://www.nthelp.com/colorcodes.htm, все заработало.

3. пауза не работает потому что не полная. должно быть вот-так:
Код:
Global $Paused
HotKeySet("{1}", "TogglePause")
HotKeySet ( "{6}" ,"_Exit")

While 1
    $p1 = PixelSearch( 0, 0, 808, 800, 0xCCCC99, 20)
        If @error Then $p1 = @error
    $p2 = PixelSearch( 790, 442, 808, 458, 0xD7201F, 20)
        If @error Then $p2 = @error
    $p3 = PixelSearch( 790, 442, 808, 458, 0xD71F1F, 20)
        If @error Then $p3 = @error
    $p4 = PixelSearch( 790, 442, 808, 458, 0xD72832, 20)
        If @error Then $p4 = @error
    $p5 = PixelSearch( 790, 442, 808, 458, 0xD72B37, 20)
        If @error Then $p5 = @error

    If $p1 <> 1 And $p2 <> 1 And $p3 <> 1 And $p4 <> 1 And $p5 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 25)
         MouseClick("left", $p2[0], $p2[1], 1, 25)
         MouseClick("left", $p3[0], $p3[1], 1, 25)
         MouseClick("left", $p4[0], $p4[1], 1, 25)
         MouseClick("left", $p5[0], $p5[1], 1, 25)
    ElseIf $p1 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 25)
    ElseIf $p2 <> 1 Then
        MouseClick("left", $p2[0], $p2[1], 1, 25)
    ElseIf $p3 <> 1 Then
        MouseClick("left", $p3[0], $p2[1], 1, 25)
    ElseIf $p4 <> 1 Then
        MouseClick("left", $p4[0], $p2[1], 1, 25)
    ElseIf $p5 <> 1 Then
        MouseClick("left", $p5[0], $p2[1], 1, 25)
    Else
        Exit
    EndIf

WEnd


Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    ToolTip("")
EndFunc

 
 Func _Exit()
    Exit
EndFunc[/spoiler]
 
Автор
R

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
Код:
HotKeySet ( "{Esc}" ,"_Exit")

While 1
    $p1 = PixelSearch( 790, 442, 808, 458, 0xCC3300, 50)
        If @error Then $p1 = @error
    $p2 = PixelSearch( 790, 442, 808, 458, 0xFF3300, 50)
        If @error Then $p2 = @error
    $p3 = PixelSearch( 790, 442, 808, 458, 0xCC3333, 50)
        If @error Then $p3 = @error
    $p4 = PixelSearch( 790, 442, 808, 458, 0xFF3333, 50)
        If @error Then $p4 = @error
    $p5 = PixelSearch( 790, 442, 808, 458, 0xFE0000, 50)
        If @error Then $p5 = @error

    If $p1 <> 1 And $p2 <> 1 And $p3 <> 1 And $p4 <> 1 And $p5 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 25)
         MouseClick("left", $p2[0], $p2[1], 1, 25)
         MouseClick("left", $p3[0], $p3[1], 1, 25)
         MouseClick("left", $p4[0], $p4[1], 1, 25)
         MouseClick("left", $p5[0], $p5[1], 1, 25)
    ElseIf $p1 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 25)
    ElseIf $p2 <> 1 Then
        MouseClick("left", $p2[0], $p2[1], 1, 25)
    ElseIf $p3 <> 1 Then
        MouseClick("left", $p3[0], $p2[1], 1, 25)
    ElseIf $p4 <> 1 Then
        MouseClick("left", $p4[0], $p2[1], 1, 25)
    ElseIf $p5 <> 1 Then
        MouseClick("left", $p5[0], $p2[1], 1, 25)
       Else
        Exit
    EndIf
WEnd


Func _Exit()
    Exit
EndFunc

Расширил поиск пикселей до 50 как думаете стоит ли делать его больше?

Далее у меня вышла такая ошибка:

Line 30
MouseClick ("left", $p5[0], $p2[1], 1, 25
MouseClick ("left", $p5[0], $p2^ERROR
Error: Subscript used on non-accessible variable.

Я в печали :(
 

КашаК

Новичок
Сообщения
15
Репутация
0
вы берете одну координату из 3, вторую из 2. $p3[0], $p2[1], (эта же ошибка в 4 и 5 )
 
Автор
R

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
Однако тот скрипт который вы прислали под цыферкой 3 работает на рабочем столе на ура без ошибочек!!! :smile:
Теперь попробую его в игре и отпишусь!)


Добавлено:
Сообщение автоматически объединено:

Воу скрипт автоматом закрывается в игре... Попробовал в окном режиме, вроде запустился но после того как паузу отжимаю закрывается автоматом...


Добавлено:
Сообщение автоматически объединено:

Пробуя запустить скрипт на рабочем столе я пришёл к выводу что для не прекращающейся работы скрипта нужно всегда быть нацеленным на красный цвет.... Так у меня сразу же вопрос как сделать так что бы скрипт не выключался а всегда работал и допустим когда я буду с различных цветов попадать на красный тогда скрипт срабатывал и жмякал лкм... А не выключался если не обнаружится нужный цвет...
 

КашаК

Новичок
Сообщения
15
Репутация
0
последнюю версию скрипта и игру или скрин на крайний случай. для теста)
 
Автор
R

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
Код:
Global $Paused
HotKeySet("{1}", "TogglePause")
HotKeySet ( "{6}" ,"_Exit")

While 1
    $p1 = PixelSearch( 790, 442, 808, 458, 0xCCCC99, 80)
        If @error Then $p1 = @error
    $p2 = PixelSearch( 790, 442, 808, 458, 0xD7201F, 80)
        If @error Then $p2 = @error
    $p3 = PixelSearch( 790, 442, 808, 458, 0xD71F1F, 80)
        If @error Then $p3 = @error
    $p4 = PixelSearch( 790, 442, 808, 458, 0xD72832, 80)
        If @error Then $p4 = @error
    $p5 = PixelSearch( 790, 442, 808, 458, 0xD72B37, 80)
        If @error Then $p5 = @error

    If $p1 <> 1 And $p2 <> 1 And $p3 <> 1 And $p4 <> 1 And $p5 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 1)
         MouseClick("left", $p2[0], $p2[1], 1, 1)
         MouseClick("left", $p3[0], $p3[1], 1, 1)
         MouseClick("left", $p4[0], $p4[1], 1, 1)
         MouseClick("left", $p5[0], $p5[1], 1, 1)
    ElseIf $p1 <> 1 Then
         MouseClick("left", $p1[0], $p1[1], 1, 1)
    ElseIf $p2 <> 1 Then
        MouseClick("left", $p2[0], $p2[1], 1, 1)
    ElseIf $p3 <> 1 Then
        MouseClick("left", $p3[0], $p3[1], 1, 1)
    ElseIf $p4 <> 1 Then
        MouseClick("left", $p4[0], $p4[1], 1, 1)
    ElseIf $p5 <> 1 Then
        MouseClick("left", $p5[0], $p5[1], 1, 1)
    Else
        Exit
    EndIf

WEnd


Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    ToolTip("")
EndFunc


 Func _Exit()
    Exit
EndFunc

скрин чего именно? :3
 

КашаК

Новичок
Сообщения
15
Репутация
0
Окна в котором искать и щелкать.

что бы не прекращал работу нужно запихнуть все в непрерывный цикл.
 
Автор
R

Rakoobrazny213

Новичок
Сообщения
7
Репутация
0
http://rghost.ru/59190214
Сама же область это квадрат вокруг прицела...
Сам же прицел имеет такую штуку как прозрачность что довольно затрудняет поиск цвета
http://rghost.ru/59190262
Такие пироги


Добавлено:
Сообщение автоматически объединено:

Ну для меня "запихать всё это в непрерывный цикл" является тайной :3
 
Верх