Что нового

[Мышь, клавиатура] Если в области [xy, x1y1] есть пиксель цветах [HEX fffff] - клик ЛКМ

MastersWRC

Новичок
Сообщения
6
Репутация
0
Если в прямоугольнике заданном координатами появляется пиксель нужного цвета - на этот пиксель нужно нажать ЛКМ. Как прописать область отслеживания цвета? :scratch:

Код:
HotKeySet("{F10}","Stop")

$Color = 7F7FE5 ;Это цвет
$hWin = ('Mozilla Firexox') ; Окно


while 1
    If PixelGetColor(82, 974) = $Color Then
          MouseClick("left",21,970)
    Else
        
    EndIf
wend

Func stop()
    Exit
 EndFunc


На базе этого.

Используйте для AutoIt кода тег [autoit]
autoit.gif

madmasles.
 

Olim98

Новичок
Сообщения
48
Репутация
2
MastersWRC
Код:
HotKeySet("{F10}","Stop")

$Color = 7F7FE5 ;Это цвет
$hWin = ('Mozilla Firexox') ; Окно
$left = 1 ;Координата x левой стороны прямоугольника.
$right = 1 ;Координата x правой стороны прямоугольника.
$top = 1 ;Координата y верхней стороны прямоугольника.
$bottom = 1 ;Координата y нижней стороны прямоугольника.
while 1
    $aPixelCoord = PixelSearch($left, $top, $right, $bottom, $color)
    If Not @error Then
          MouseClick("left", $aPixelCoord[0], $aPixelCoord[1])
    Else
       
    EndIf
wend

Func stop()
    Exit
EndFunc
Вместо 1ок поставь нужные координаты
 
Автор
MastersWRC

MastersWRC

Новичок
Сообщения
6
Репутация
0
Код:
MouseClick("left", $aPixelCoord[0], $aPixelCoord[1])


а что означает эта строчка? Лефт - понятно. МаусКлик - понятно. А что за координаты 0 и 1 ?
 

Olim98

Новичок
Сообщения
48
Репутация
2
MastersWRC
Координаты нужного пикселя возвращенные функцией PixelSearch в виде массива
 
Автор
MastersWRC

MastersWRC

Новичок
Сообщения
6
Репутация
0
Ясно, как добавить другие цвета? Через запятую получится :rofl:?
 

Olim98

Новичок
Сообщения
48
Репутация
2
MastersWRC
Самы простой способ, это добавить еще один pixelsearch и там указать другой цвет. Если надо расскажу путь сложный ;D
 
Автор
MastersWRC

MastersWRC

Новичок
Сообщения
6
Репутация
0
Добавь для примера один цвет пожалуйста!
Не нашёл в справке ifelse. Может elseif?

Попробую

Код:
[ElseIf expression-n Then
    [elseif statements ... ]]



А как сверху добавить ещё один цвет?
 

Olim98

Новичок
Сообщения
48
Репутация
2
Код:
HotKeySet("{F10}","Stop")

$Color = '7F7FE5' ;Это цвет
$Color2 = 'F77FE3' ;Это цвет2
$hWin = ('Mozilla Firexox') ; Окно
$left = 1 ;Координата x левой стороны прямоугольника.
$right = 1 ;Координата x правой стороны прямоугольника.
$top = 1 ;Координата y верхней стороны прямоугольника.
$bottom = 1 ;Координата y нижней стороны прямоугольника.
while 1
    $aPixelCoord = PixelSearch($left, $top, $right, $bottom, $color)
    If Not @error Then
          MouseClick("left", $aPixelCoord[0], $aPixelCoord[1])
    EndIf
    $aPixelCoord = PixelSearch($left, $top, $right, $bottom, $color2)
    If Not @error Then
          MouseClick("left", $aPixelCoord[0], $aPixelCoord[1])
    EndIf
wend

Func stop()
    Exit
EndFunc
 
Автор
MastersWRC

MastersWRC

Новичок
Сообщения
6
Репутация
0
Теперь вопроса уже два:
[list type=decimal]
[*]как настроить скорость передвижения курсора? Спид=0 уже ставил.
Код:
MouseClick("left", $aPixelCoord[0], $aPixelCoord[1], 0)
Скрипт тупо не работает, а единицы по умолчанию не хватает :'(
[*]как реализовать клик при изменении цвета пикселя на любой? Координата не меняется. Пиксель поменял цвет - клик.
[/list]
По форуму искал: есть инфа о том как сделать клик при изменении на опр. цвет. А мне нужно на любой.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MastersWRC [?]
Если в прямоугольнике заданном координатами появляется пиксель нужного цвета - на этот пиксель нужно нажать ЛКМ.
Вот вам пример:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

HotKeySet("{ESC}", "_Exit")

#Region Variables

$iTop = 0
$iLeft = 0
$iRight = $iLeft + 623
$iBottom = $iTop + 449
$iIndex = 0
$iTrigger = 1
$sColors = "0xFF0000|0x0000FF|0x008000"
$aColors = StringSplit($sColors, "|", 2)

#EndRegion Variables

AdlibRegister('_RandomSetColor', 500)

#Region Form

$Form1 = GUICreate("Search -->", 623, 449, -1, -1)
GUISetBkColor(0xFFFFFF)
$Label1 = GUICtrlCreateLabel("", 80, 64, 4, 4)
$Label2 = GUICtrlCreateLabel("", 200, 264, 4, 4)
$Label3 = GUICtrlCreateLabel("", 456, 160, 4, 4)
GUISetState(@SW_SHOW)

#EndRegion Form

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
	 Case $GUI_EVENT_CLOSE
		 Exit

   EndSwitch

   If $iTrigger Then
	  $iIndex = Mod($iIndex, 3)
	  $xColor = $aColors[$iIndex]
	  $sTitle = WinGetTitle("[active]")
	  WinSetTitle($sTitle, "", StringFormat("Search --> %s", $xColor))
	  $iTrigger = 0
   EndIf

   $aCord = PixelSearch($iLeft, $iTop, $iRight, $iBottom, $xColor)
   If IsArray($aCord) Then
	  MouseClick("left", $aCord[0], $aCord[1])
	  WinSetTitle("[active]", "", StringFormat("Search --> %s", "Click!"))
	  Sleep(250)
	  $iIndex +=1
	  $iTrigger = 1
   EndIf

WEnd

Func _RandomSetColor()

   $i = Random(1, 4, 1)
   $x = Random(0, 621, 1)
   $y = Random(0, 447, 1)
   If $i < 4 Then GUICtrlSetPos(Eval("Label"&$i), $x, $y, 4, 4)

   Switch $i
	  Case 1
		 GUICtrlSetBkColor($Label1, 0xFF0000)
		 GUICtrlSetBkColor($Label2, 0xFFFFFF)
		 GUICtrlSetBkColor($Label3, 0xFFFFFF)
	  Case 2
		 GUICtrlSetBkColor($Label1, 0xFFFFFF)
		 GUICtrlSetBkColor($Label2, 0x0000FF)
		 GUICtrlSetBkColor($Label3, 0xFFFFFF)
	  Case 3
		 GUICtrlSetBkColor($Label1, 0xFFFFFF)
		 GUICtrlSetBkColor($Label2, 0xFFFFFF)
		 GUICtrlSetBkColor($Label3, 0x008000)
	  Case Else
		 GUICtrlSetBkColor($Label1, 0xFFFFFF)
		 GUICtrlSetBkColor($Label2, 0xFFFFFF)
		 GUICtrlSetBkColor($Label3, 0xFFFFFF)
   EndSwitch
EndFunc ;==>_RandomSetColor

Func _Exit()
   Exit
EndFunc ;==>_Exit


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

MastersWRC [?]
Скрипт тупо не работает
Работает, просто вы не хотите читать справку ;)
A speed of 0 will move the mouse instantly
Скорость 0 мышь перемещается мгновенно.


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

MastersWRC [?]
как реализовать клик при изменении цвета пикселя на любой?
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

HotKeySet("{ESC}", "_Exit")

#Region Variable

$iTop = 0
$iLeft = 0
$iRight = $iLeft + 623
$iBottom = $iTop + 449
$iTrigger = 1
$sColors = "0xFF0000|0x0000FF|0x008000"
Global $aColors = StringSplit($sColors, "|", 2)

#EndRegion Variable

AdlibRegister('_RandomSetColor', 1000)

#Region Form

$Form1 = GUICreate("Search -->", 623, 449, -1, -1)
GUISetBkColor(0xFFFFFF)
$Label1 = GUICtrlCreateLabel("", 623/2-10, 449/2-10, 20, 20)
GUISetState(@SW_SHOW)

#EndRegion Form

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
	 Case $GUI_EVENT_CLOSE
		 Exit

   EndSwitch

   If $iTrigger Then
	  $iColor1 = PixelGetColor(623/2-10, 449/2-10, $Form1)
	  $sTitle = WinGetTitle("[active]")
	  WinSetTitle($sTitle, "", StringFormat("Search --> %s", Hex($iColor1)))
	  $iTrigger = 0
   EndIf

   $iColor2 = PixelGetColor(623/2-10, 449/2-10, $Form1)

   If ($iColor1 <> $iColor2) Then
	  $aCord = PixelSearch($iLeft, $iTop, $iRight, $iBottom, $iColor2)
	  MouseClick("left", $aCord[0]+10, $aCord[1]+10, 0)
	  WinSetTitle("[active]", "", StringFormat("Search --> %s", "Click!"))
	  Sleep(250)
	  $iTrigger = 1
   EndIf

WEnd

Func _RandomSetColor()

   $i = Random(0, 2, 1)
   $iColor = $aColors[$i]
   GUICtrlSetBkColor($Label1, $iColor)
EndFunc ;==>_RandomSetColor

Func _Exit()
   Exit
EndFunc ;==>_Exit
 
Автор
MastersWRC

MastersWRC

Новичок
Сообщения
6
Репутация
0
Со скоростью разобрался ещё вчера ночью. Оно не работало из за того, что я пропускал кол-во кликов. А вот с "кликом если любого другого цвета пиксель" - ещё нет. :stars:


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

Так и не очистил код от ненужного. Уточняю задачу. Условие: в прямоугольнике, заданном определёнными координатами есть фон одного цвета: 0х00000000. В этом прямоугольнике появляется кружок определённого размера, с определённым цветом. Как только происходит клик мышью по шарику - шарик пропадает. В другом месте (внутри прямоугольника) появляется другой шарик такого же размера, но ДРУГОГО цвета. Я пол ночи убил на то, что записывал в алгоритм цвета. После 64 цветов понял, что тут стоит рандом не по изображениям, а кодом. Таким образом записать ВСЕ возможные цвета нереально. Нарыл про
Код:
shade

Код:
HotKeySet("{F10}","Stop")

$Color = 0x00858585 ;Это цвет
$left = 350 ;Координата x левой стороны прямоугольника.
$right = 886 ;Координата x правой стороны прямоугольника.
$top = 280 ;Координата y верхней стороны прямоугольника.
$bottom = 800 ;Координата y нижней стороны прямоугольника.
$hWin = ('Mozilla Firefox') ; Окно


while 1

    $aPixelCoord = PixelSearch($left, $top, $right, $bottom, $color, 19)
    If Not @error Then
           MouseClick("left", $aPixelCoord[0], $aPixelCoord[1], 1, 7 )
	  Else

    EndIf
wend

Func stop()

В этом случае алгоритм тыцает только на первый попавшийся подходящий пиксель.
Я так понял алгоритм следующий:
цвет пикселя из прямоугольника [a,b,c,d] = 0х0000000
Если да то ничего
Если нет - клик.

Как это реализовать то ?
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
Забавно :smile: Как так понял фон у вас черного цвета? Тогда бы почему не поискать белый с огромным разбросом?
Код:
$Color = 0xFFFFFF ;Это белый цвет
$aPixelCoord = PixelSearch($left, $top, $right, $bottom, $color,200,5)
;200 разброс поиска, 5 кол-во пропускаемых пикселей при поиске.
 
Верх