1 (изменено: alexii, 2011-11-04 20:26:15)

Тема: AHK: как в скрипте включить определение цвета пикселя?

Вот рабочий скрипт

x:=30


     while x>1
      {
        ControlSend,, {Tab}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 50

        ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100
        ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
        Sleep, 100

        x:=x

     }



Gui, Add, Text,, Пожалуйста, для получения полной версии и дополнений, напишите на e-mail: bigrin@i.ua



Gui, Add, Button, , Go
Return


ButtonGo:
ExitApp
Return


ESC::Pause

Можно ли включить в его цикл, функцию определения цвета определенного пикселя, чтоб при смене цвета на искомый, срабатывала определенная клавиша, но не раньше и чтоб не мешала циклу скрипта?
Пробовал вставлять следущую строку

MouseClick, Left,156,64
                PixelGetColor, Color,156,64
                if Color= 0x040029
                Send,{F6}

Но я очень плохо понимаю скриптовый язык, мож что не так делаю. Подскажите.

2

Re: AHK: как в скрипте включить определение цвета пикселя?

Ilya1981, код на форуме оформляется тэгом «code». Я поправил Ваш пост.

3

Re: AHK: как в скрипте включить определение цвета пикселя?

Собственно ни чего сложного не вижу, если информация о координатах поиска/цвете правильная, то добавляете в цикл примерно так:

...
   While x>1
   {
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {Tab}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 50
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      x:=x ; не понятное действие
  }
...

поиск один раз в течении одной итерации цикла (в начале), или так:

...
   While x>1
   {
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {Tab}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 50
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      PixelGetColor, CurrentColor, 156, 64
      If CurrentColor=0x040029
         Send, {F6}
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      x:=x
  }
...

тут поиск производится за одну итерацию несколько раз, или создаёте функцию с содержанием поиска и вставляете в цикл:

...
   While x>1
   {
      ColorCheck()
      ControlSend,, {Tab}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 50
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      x:=x
  }
...
ColorCheck()
{
   PixelGetColor, CurrentColor, 156, 64
   If CurrentColor=0x040029
      Send, {F6}
}

аналог первого варианта, или:

...
   While x>1
   {
      ColorCheck()
      ControlSend,, {Tab}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 50
      ColorCheck()
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F1}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      ColorCheck()
      ControlSend,, {F2}, ahk_class Sandbox:DefaultBox:Nksp
      Sleep, 100
      x:=x
  }
...
ColorCheck()
{
   PixelGetColor, CurrentColor, 156, 64
   If CurrentColor=0x040029
      Send, {F6}
}

соответственно аналогия второго. С параметрами Gui тоже не понятно, задаётся текст, кнопка, но нет параметров его размера и отображения... Я для примера добавлю свой скрипт, в нём выполняются аналогичные действия (местами), м.б. он будет полезен.

x:=30
Run, notepad.exe, % A_WinDir "\System32",, WinPID
Sleep, 250
While x<>35
{
   x++, ColorCheck()
   ControlSend, Edit1, {Tab}, % "ahk_pid" WinPID
   Sleep, 100
   ControlSend, Edit1, % "{F5} (x="x ")", % "ahk_pid" WinPID
   Sleep, 100
   ControlSend, Edit1, {`n}, % "ahk_pid" WinPID
}
Gui, Add, Text, +Center, % "Pojaluista"
   . "`ndlya polucheniya polnoi versii, i dopolnenii"
   . "`nnapishite na e-mail: bigrin@i.ua"
Gui, Add, Button, x16 y67 w80 h20 +Center, &Reload
Gui, Add, Button, x126 y67 w80 h20 +Center, &Exit
Gui, Show, Center h100 w220
Return

GuiClose:
ButtonExit:
ButtonReload:
   BlockInput, On
   WinKill, % "ahk_pid" WinPID
   ControlClick, Button2, ahk_class #32770,,, 2
   BlockInput, Off
   If A_GuiControl=&Reload
      Reload
   Else
      ExitApp

ColorCheck()
{
   PixelGetColor, CurrentColor, 156, 64
   If CurrentColor=0x040029
      Send, {F6}
}

4

Re: AHK: как в скрипте включить определение цвета пикселя?

спасибо за помощь.