[решено] Выполнение функции после определения цвета

Ответить
Аватара пользователя
AutoITAdepT

[решено] Выполнение функции после определения цвета

Сообщение AutoITAdepT »

Доброго времени суток всем гуру! Вот в чем вопрос, в одном из активных приложений на одном и том же месте есть цветовой датчик, в нем используются 3 цвета красный, зеленый, и черный. каким образом можно сделать так чтобы на красный и зеленый скрипт выполнял одну функцию, а на черный другую.

ранее использовал

$p = PixelGetColor(380,100)

if $p>13000000 and $p< 15000000

но, как показала практика работает это только с одним цветом - красным. заранее спасибо!
Аватара пользователя
Creat0R

Re: [решено] Выполнение функции после определения цвета

Сообщение Creat0R »

Во-первых, что такое «фенуции»?

А во-вторых нужен полный пример, показывающий что оно действительно работаеттолько с красным.



Вот пример показывающий что функция успешно работает со всеми цветами:



Код: Выделить всё

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("PixelCoordMode", 2)
Dim $aColors[3] = [0xFF0000, 0x00FF00, 0x0000FF]
Dim $aCoords[2] = [20, 40]
$hGUI = GUICreate("Test Script", 300, 200)
GUISetState(@SW_SHOW, $hGUI)
For $i = 1 To 3
    GUICtrlCreateLabel("", $aCoords[0], $aCoords[1], 150, 20)
    GUICtrlSetBkColor(-1, $aColors[$i-1])
    $nColor = PixelGetColor($aCoords[0], $aCoords[1], $hGUI)
    ConsoleWrite("Color for Label #" & $i & ": 0x" & Hex($nColor, 6) & @LF)
    $aCoords[1] += 30
Next
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Аватара пользователя
AutoITAdepT

Re: [решено] Выполнение функции после определения цвета

Сообщение AutoITAdepT »

Фенуции - это я так опечатался грамотно, прошу прощения.

сейчас у меня вот так:



Код:

Код: Выделить всё

$n=1
	Do
		$p = PixelGetColor(388,100)
		if $p > 4000000 and $p < 16000000  Then
			Wrn()
		Else
			send ("9")
			sleep(17000)
		EndIf
	Until $n=2

но я пытаюсь сделать вот что, если красный или зеленый, то этот бесконечный цикл работает, если черный, то прекращается, если снова будет красный или зеленый, то снова начинает работать.
Аватара пользователя
Creat0R

Re: [решено] Выполнение функции после определения цвета

Сообщение Creat0R »

Цитата AutoITAdepT:



if $p > 4000000 and $p < 16000000 Then
[решено] Выполнение функции после определения цвета




Что это проверяет? для красного нужно проверять 0xff0000, для зелёного 0x00ff00, а для чёрного 0x000000.
Аватара пользователя
AutoITAdepT

Re: [решено] Выполнение функции после определения цвета

Сообщение AutoITAdepT »

PixelGetColor вытаскивает цвета именно в таком формате, в данном случае зеленый это примерно 4300000 а красный 15500000, черный ниже 4000000, примерно 3900000.

У меня проблема в том что я не знаю как вытащить цвета в формате 0х******, и как потом остановить бесконечный цикл если цвет черный, а если зеленый и красный запустить снова.
Аватара пользователя
madmasles

Re: [решено] Выполнение функции после определения цвета

Сообщение madmasles »

Цитата AutoITAdepT:



но я пытаюсь сделать вот что, если красный или зеленый, то этот бесконечный цикл работает, если черный, то прекращается, если снова будет красный или зеленый, то снова начинает работать.
[решено] Выполнение функции после определения цвета




Можно, наверное, так попробовать. Числа сами подставьте нужные.

Код: Выделить всё

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("PixelCoordMode", 2)
Dim $aColors[3] = [0xFF0000, 0x00FF00, 0x000000]
Global $Paused, $i = 0
$hGUI = GUICreate("Test Script", 300, 200)
$hLabel = GUICtrlCreateLabel("", 20, 40, 150, 20)
GUISetState(@SW_SHOW, $hGUI)
$timer = TimerInit()
While 1
    If TimerDiff($timer) > 5000 Then
        $timer = TimerInit()
        GUICtrlSetBkColor($hLabel, $aColors[$i])
        $i += 1
        If $i = 3 Then $i = 0
        $nColor = PixelGetColor(20, 40, $hGUI)
        Select
            Case $nColor > 16000000 And $nColor < 17000000
                ToolTip('Red: 0x' & Hex($nColor, 6))
                SomeFunc()
            Case $nColor > 50000 And $nColor < 100000
                ToolTip('Green: 0x' & Hex($nColor, 6))
                SomeFunc()
            Case $nColor = 0 And $nColor < 1000
                ToolTip('Black: 0x' & Hex($nColor, 6))
                _Pause()
        EndSelect
    EndIf
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
Func _Pause()
    TrayTip("Pause", "Ничего не делаем.", 5, 17)
EndFunc   ;==>_Pause
Func SomeFunc()
    TrayTip("SomeFunc", "Что-то делаем.", 5, 17)
EndFunc   ;==>SomeFunc
Аватара пользователя
AutoITAdepT

Re: [решено] Выполнение функции после определения цвета

Сообщение AutoITAdepT »

Цитата AutoITAdepT:



PixelGetColor вытаскивает цвета именно в таком формате
[решено] Выполнение функции после определения цвета




Это вы так его видите (для вывода оно преобразовывается в Dec), на самом деле это Hex число, и сравнивать его можно обычно:





Код:

Код: Выделить всё

$p = PixelGetColor(388, 100)
If $p = 0x000000 Then MsgBox(0, '', 'Black')
Аватара пользователя
Creat0R

Re: [решено] Выполнение функции после определения цвета

Сообщение Creat0R »

Огромное спасибо! будете в Барнауле, звоните, с меня пиво! Изображение
Аватара пользователя
Creat0R

Re: [решено] Выполнение функции после определения цвета

Сообщение Creat0R »

Если тема решена, то её нужно помечать таковой.
Ответить

Вернуться в «AutoIt»