Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Выполнение функции после определения цвета (http://forum.oszone.net/showthread.php?t=181113)

AutoITAdepT 21-07-2010 17:31 1457751

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

Creat0R 21-07-2010 21:57 1457914

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

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

Код:

#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 21-07-2010 22:54 1457938

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

$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 1457945

Цитата:

Цитата AutoITAdepT
if $p > 4000000 and $p < 16000000 Then »

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

AutoITAdepT 22-07-2010 11:34 1458232

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

kaster 22-07-2010 12:41 1458288

Код:

$a = 4000000
ConsoleWrite("0x" & Hex($a, 6) & @CRLF)


madmasles 22-07-2010 12:57 1458305

Цитата:

Цитата 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


Creat0R 22-07-2010 15:12 1458424

Цитата:

Цитата AutoITAdepT
PixelGetColor вытаскивает цвета именно в таком формате »

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

Код:

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


AutoITAdepT 22-07-2010 19:10 1458636

Огромное спасибо! будете в Барнауле, звоните, с меня пиво! ;)

Creat0R 22-07-2010 23:42 1458808

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


Время: 06:49.

Время: 06:49.
© OSzone.net 2001-