[решено] Выполнение функции после определения цвета
-
AutoITAdepT
[решено] Выполнение функции после определения цвета
Доброго времени суток всем гуру! Вот в чем вопрос, в одном из активных приложений на одном и том же месте есть цветовой датчик, в нем используются 3 цвета красный, зеленый, и черный. каким образом можно сделать так чтобы на красный и зеленый скрипт выполнял одну функцию, а на черный другую.
ранее использовал
$p = PixelGetColor(380,100)
if $p>13000000 and $p< 15000000
но, как показала практика работает это только с одним цветом - красным. заранее спасибо!
ранее использовал
$p = PixelGetColor(380,100)
if $p>13000000 and $p< 15000000
но, как показала практика работает это только с одним цветом - красным. заранее спасибо!
-
Creat0R
Re: [решено] Выполнение функции после определения цвета
Во-первых, что такое «фенуции»?
А во-вторых нужен полный пример, показывающий что оно действительно работаеттолько с красным.
Вот пример показывающий что функция успешно работает со всеми цветами:
А во-вторых нужен полный пример, показывающий что оно действительно работаеттолько с красным.
Вот пример показывающий что функция успешно работает со всеми цветами:
Код: Выделить всё
#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: [решено] Выполнение функции после определения цвета
Фенуции - это я так опечатался грамотно, прошу прощения.
сейчас у меня вот так:
Код:
но я пытаюсь сделать вот что, если красный или зеленый, то этот бесконечный цикл работает, если черный, то прекращается, если снова будет красный или зеленый, то снова начинает работать.
сейчас у меня вот так:
Код:
Код: Выделить всё
$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: [решено] Выполнение функции после определения цвета
Цитата AutoITAdepT:
if $p > 4000000 and $p < 16000000 Then
Что это проверяет? для красного нужно проверять 0xff0000, для зелёного 0x00ff00, а для чёрного 0x000000.
if $p > 4000000 and $p < 16000000 Then
[решено] Выполнение функции после определения цвета
Что это проверяет? для красного нужно проверять 0xff0000, для зелёного 0x00ff00, а для чёрного 0x000000.
-
AutoITAdepT
Re: [решено] Выполнение функции после определения цвета
PixelGetColor вытаскивает цвета именно в таком формате, в данном случае зеленый это примерно 4300000 а красный 15500000, черный ниже 4000000, примерно 3900000.
У меня проблема в том что я не знаю как вытащить цвета в формате 0х******, и как потом остановить бесконечный цикл если цвет черный, а если зеленый и красный запустить снова.
У меня проблема в том что я не знаю как вытащить цвета в формате 0х******, и как потом остановить бесконечный цикл если цвет черный, а если зеленый и красный запустить снова.
-
kaster
Re: [решено] Выполнение функции после определения цвета
Код:
Код: Выделить всё
$a = 4000000
ConsoleWrite("0x" & Hex($a, 6) & @CRLF)-
madmasles
Re: [решено] Выполнение функции после определения цвета
Цитата 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:
PixelGetColor вытаскивает цвета именно в таком формате
Это вы так его видите (для вывода оно преобразовывается в Dec), на самом деле это Hex число, и сравнивать его можно обычно:
Код:
PixelGetColor вытаскивает цвета именно в таком формате
[решено] Выполнение функции после определения цвета
Это вы так его видите (для вывода оно преобразовывается в Dec), на самом деле это Hex число, и сравнивать его можно обычно:
Код:
Код: Выделить всё
$p = PixelGetColor(388, 100)
If $p = 0x000000 Then MsgBox(0, '', 'Black')-
Creat0R
Re: [решено] Выполнение функции после определения цвета
Огромное спасибо! будете в Барнауле, звоните, с меня пиво! 

-
Creat0R
Re: [решено] Выполнение функции после определения цвета
Если тема решена, то её нужно помечать таковой.