Войти

Показать полную графическую версию : [решено] Выполнение функции после определения цвета


AutoITAdepT
21-07-2010, 17:31
Доброго времени суток всем гуру! Вот в чем вопрос, в одном из активных приложений на одном и том же месте есть цветовой датчик, в нем используются 3 цвета красный, зеленый, и черный. каким образом можно сделать так чтобы на красный и зеленый скрипт выполнял одну функцию, а на черный другую.
ранее использовал
$p = PixelGetColor(380,100)
if $p>13000000 and $p< 15000000
но, как показала практика работает это только с одним цветом - красным. заранее спасибо!

Creat0R
21-07-2010, 21:57
Во-первых, что такое «фенуции»?
А во-вторых нужен полный пример, показывающий что оно действительно работаеттолько с красным.

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

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <GUIConstantsEx.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WindowsConstants.au3>

Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("PixelCoordMode", 2)

Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aColors[3] = [0xFF0000, 0x00FF00, 0x0000FF]
Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aCoords[2] = [20, 40]

$hGUI = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("Test Script", 300, 200)

GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_show), $hGUI)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) 3
GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)("", $aCoords[0], $aCoords[1], 150, 20)
GUICtrlSetBkColor (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetBkColor.htm)(-1, $aColors[$i-1])

$nColor = PixelGetColor (http://www.autoitscript.com/autoit3/docs/functions/PixelGetColor.htm)($aCoords[0], $aCoords[1], $hGUI)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)("Color for Label #" & $i & ": 0x" & Hex (http://www.autoitscript.com/autoit3/docs/functions/Hex.htm)($nColor, 6) & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf))

$aCoords[1] += 30
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

AutoITAdepT
21-07-2010, 22:54
Фенуции - это я так опечатался грамотно, прошу прощения.
сейчас у меня вот так:

$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
21-07-2010, 23:16
if $p > 4000000 and $p < 16000000 Then »
Что это проверяет? для красного нужно проверять 0xff0000, для зелёного 0x00ff00, а для чёрного 0x000000.

AutoITAdepT
22-07-2010, 11:34
PixelGetColor вытаскивает цвета именно в таком формате, в данном случае зеленый это примерно 4300000 а красный 15500000, черный ниже 4000000, примерно 3900000.
У меня проблема в том что я не знаю как вытащить цвета в формате 0х******, и как потом остановить бесконечный цикл если цвет черный, а если зеленый и красный запустить снова.

kaster
22-07-2010, 12:41
$a = 4000000
ConsoleWrite("0x" & Hex($a, 6) & @CRLF)

madmasles
22-07-2010, 12:57
но я пытаюсь сделать вот что, если красный или зеленый, то этот бесконечный цикл работает, если черный, то прекращается, если снова будет красный или зеленый, то снова начинает работать. »
Можно, наверное, так попробовать. Числа сами подставьте нужные.#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <GUIConstantsEx.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WindowsConstants.au3>

Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("PixelCoordMode", 2)

Dim (http://www.autoitscript.com/autoit3/docs/keywords.htm#Dim) $aColors[3] = [0xFF0000, 0x00FF00, 0x000000]
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $Paused, $i = 0

$hGUI = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)("Test Script", 300, 200)
$hLabel = GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)("", 20, 40, 150, 20)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)(@SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_show), $hGUI)

$timer = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)()
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) TimerDiff (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)($timer) > 5000 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$timer = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)()
GUICtrlSetBkColor (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetBkColor.htm)($hLabel, $aColors[$i])
$i += 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $i = 3 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $i = 0
$nColor = PixelGetColor (http://www.autoitscript.com/autoit3/docs/functions/PixelGetColor.htm)(20, 40, $hGUI)
Select (http://www.autoitscript.com/autoit3/docs/keywords.htm#Select)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nColor > 16000000 And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $nColor < 17000000
ToolTip (http://www.autoitscript.com/autoit3/docs/functions/ToolTip.htm)('Red: 0x' & Hex (http://www.autoitscript.com/autoit3/docs/functions/Hex.htm)($nColor, 6))
SomeFunc()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nColor > 50000 And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $nColor < 100000
ToolTip (http://www.autoitscript.com/autoit3/docs/functions/ToolTip.htm)('Green: 0x' & Hex (http://www.autoitscript.com/autoit3/docs/functions/Hex.htm)($nColor, 6))
SomeFunc()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nColor = 0 And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $nColor < 1000
ToolTip (http://www.autoitscript.com/autoit3/docs/functions/ToolTip.htm)('Black: 0x' & Hex (http://www.autoitscript.com/autoit3/docs/functions/Hex.htm)($nColor, 6))
_Pause()
EndSelect (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSelect)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Pause()
TrayTip (http://www.autoitscript.com/autoit3/docs/functions/TrayTip.htm)("Pause", "Ничего не делаем.", 5, 17)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_Pause

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) SomeFunc()
TrayTip (http://www.autoitscript.com/autoit3/docs/functions/TrayTip.htm)("SomeFunc", "Что-то делаем.", 5, 17)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>SomeFunc

Creat0R
22-07-2010, 15:12
PixelGetColor вытаскивает цвета именно в таком формате »
Это вы так его видите (для вывода оно преобразовывается в Dec), на самом деле это Hex число, и сравнивать его можно обычно:

$p = PixelGetColor(388, 100)
If $p = 0x000000 Then MsgBox(0, '', 'Black')

AutoITAdepT
22-07-2010, 19:10
Огромное спасибо! будете в Барнауле, звоните, с меня пиво! ;)

Creat0R
22-07-2010, 23:42
Если тема решена, то её нужно помечать таковой.




© OSzone.net 2001-2012