1 (изменено: elektrovenik, 2013-02-22 09:16:50)

Тема: AHK: Imagesearch, нужна помощь в отладке скрипта

Здравствуйте. Появилась надобность в следующем скрипте : Имеется изображение на экране, положения которого могут быть различны. Мне необходимо, чтобы скрипт отслеживал изменения в данном изображении и когда таковые появляются, проигрывал звуковой файл.
У меня получилось следующее (пояснения делал для себя, чтобы сложить кусочки мозаики, в ахк я далеко не спец):


f5::
Loop
{
ImageSearch, Start_mark_X, Start_mark_Y, 0, 0, 1600, 900, 50.bmp
if ErrorLevel = 2
    {
        MsgBox Нет картинки, с образцом изображения для поиска!
    }
else if ErrorLevel = 1
    {
    SoundPlay zoidberg.mp3
    }
}
return

f6::
pause

При этом происходит, как я понимаю, "задержка считывания", и звуковой файл воспроизводится, даже при неизменности исходного изображения. Пытался решить проблему, установив в начале скрипта задержку, частично это помогло сократить колличество "лжепроигрываний", но проблему не решило.


Loop
{
Sleep 5000
ImageSearch, Start_mark_X, Start_mark_Y, 0, 0, 1600, 900, 50.bmp

Отредактировал сообщение, частично получив ответы на свои вопросы.

2

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Up что-ли теме

3

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

elektrovenik пишет:

Объясните пожалуйста значение этих " *TransFuchsia " и " *30 "

В качестве суффикса опции указан именованный цвет. Эти варианты эквивалентны:

 ..., *TransFuchsia xxx.bmp
 ..., *Trans0хFF00FF xxx.bmp
 ..., *TransFF00FF xxx.bmp

*30 - значение допустимого количества оттенков из диапазона от 0 до 255, где при меньшем значении - критерии совпадения по оттенкам компонентов цвета (красный, зелёный, синий) грубее, и наоборот.

elektrovenik пишет:

Имеется три условия идущие по порядку, но я понимаю не все...

Если ErrorLevel = 2 - делаем что-то, другие условия не проверяются.

4 (изменено: elektrovenik, 2013-02-22 09:35:53)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Спасибо, что откликнулись Grey, стало немного понятнее. Хотелось бы еще, по возможности, получить помощь по главному вопросу моей темы.

5

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Не нашел в вашей теме ни одного вопроса. «Мне необходимо» — главный вопрос?

6

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

@ТС Не знаю как Вы ищите без использования опции касаемо оттенков, вот так я к примеру нахожу искомое http://imageshack.us/a/img443/2073/sarcasm.png в окне с подобными: http://imageshack.us/a/img32/2007/findsarcasm.jpg

sndPath:="c:\Windows\Media\", path:="c:\sarcasm.png", tint:="*"tSize:=120 . A_Space

WheelUp::
WheelDown::
   If % A_PriorHotkey=A_ThisHotkey And A_TimeSincePriorHotkey<150
      Return
   TrayTip,, % tint:="*"(A_ThisHotkey~="Up" ? tSize+=5:tSize-=5) . A_Space
   Return

F4::
   Loop
   {
      WinGetPos,,, w, h, A
      ImageSearch, outX, outY, 0, 0, w, h, % tint . path
      If ErrorLevel
      {
         If ErrorLevel=1
            SoundPlay, % sndPath "ding.wav", 1
         Else
         {
            MsgBox, 262192, % "An error occured"
                  , % "Failure to open the image file`nor a badly formatted option!"
            ExitApp
         }
      }
      Else
      {
         MouseMove, outX, outY
         SoundPlay, % sndPath "tada.wav", 1
      }
;       Sleep, 1000
   }
   Return

F6::Pause

Подставте свои данные, и поищите нужную величину оттенка скролом мыши.

7 (изменено: elektrovenik, 2013-02-22 19:10:57)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

creature.ws пишет:

Не нашел в вашей теме ни одного вопроса. «Мне необходимо» — главный вопрос?

Jokero пишет:

Здравствуйте. Возникла потребность создать скрипт, который будет кликать по определенной области в браузере, но область каждый раз меняется. Поэтому решил использовать тег imagesearch, но увы, он не работает. Вот сам код:


CoordMode Pixel
^Z::
   Loop
      {
         Imagesearch, x, y, %x%, %y%, %a_screenwidth%, %a_screenheight%, %a_scriptdir%\test.bmp
         If Errorlevel = 0
         MouseClick, Left, X, Y
      }

После подобной постановки вопроса, человеку отлично помогли и никто не возмущался.
creature.ws Вы видимо один, такой щепетильный?

8 (изменено: ypppu, 2013-02-27 17:39:28)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Grey пишет:

@ТС Не знаю как Вы ищите без использования опции касаемо оттенков.

Ув. Grey, в отличии от Вас, к великому моему сожалению, я не разбираюсь в замечательных возможностях ahk так как Вы, в первом посте я об этом написал. На ваш форум я обращаюсь за помощью, а не критикой моих попыток, основанных на весьма скудных познаниях, выполнить какую-то желаему задумку. Тем не менее я бьюсь до последнего сам, порой разбираюсь в прямом смысле слова с утра до ночи, так же переводя англоязычные статьи и пытаясь найти крупицы истины, не желая беспокоить кого-либо без повода и если уже я захожу в тупик, тогда обращаюсь за помощью к данному форуму.
Я писал, что данный скрип я делал на основе уже имеющихся и работоспособных, соотвественно и то что вы видели - вытекало из них. Проверка скрипта на скрине( т.е открытие скриншота в любом приложении для просмотра и прогонка скрипта по нему) - результат 100%, никаких сбоев. Когда этот же скрипт задействуется уже при запущенной u r p e, и изображение на экране подобно скриншоту, происходят лжепроигрывания, о которых я писал.

9

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Имеется изображение на экране, положения которого могут быть различны. Мне необходимо, чтобы скрипт отслеживал изменения в данном изображении и когда таковые появляются, 

Может тогда стоит сравнивать найденные координаты этого изображения и если они изменились, то подавать сигнал.

10

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Malcev пишет:
Имеется изображение на экране, положения которого могут быть различны. Мне необходимо, чтобы скрипт отслеживал изменения в данном изображении и когда таковые появляются, 

Может тогда стоит сравнивать найденные координаты этого изображения и если они изменились, то подавать сигнал.

Идея интересная, внесу немного конкретики. Изображение для поиска http://i0.5cm.ru/i/GyJe.png. Мне хотелось бы осуществить проигрывание звукового файла, когда цифра 1 будет меняться. Как лучше это сделать - я не имею понятия. Мне кажется ImageSearch наиболее подходящее. Осуществление через PixelSearch или PixelGetColor считаю очень сложным, ибо нужно отследить неизменные пиксели в единичке, что слишком крапотливо и не гарантируется, что в любом сегменте другого числа не будет пикселя того же цвета в той же координате.

11 (изменено: elektrovenik, 2013-02-22 21:39:25)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Grey пишет:

Подставте свои данные, и поищите нужную величину оттенка скролом мыши.

sndPath:="c:\Windows\Media\", path:="C:\Users\Layzerk\Pictures\50.bmp", tint:="*"tSize:=120 . A_Space

WheelUp::
WheelDown::
   If % A_PriorHotkey=A_ThisHotkey And A_TimeSincePriorHotkey<150
      Return
   TrayTip,, % tint:="*"(A_ThisHotkey~="Up" ? tSize+=5:tSize-=5) . A_Space
   Return

F5::
   Loop
   {
      WinGetPos,,, w, h, A
      ImageSearch, outX, outY, 0, 0, 1600, 900, % tint . path
      If ErrorLevel
      {
         If ErrorLevel=1
            SoundPlay, % sndPath "ding.wav", 1
         Else
         {
            MsgBox, 262192, % "An error occured"
                  , % "Failure to open the image file`nor a badly formatted option!"
            ExitApp
         }
      }
      Else
      {
         SoundPlay, % sndPath "tada.wav", 1
      }
;       Sleep, 1000
   }
   Return

F6::Pause

Сделал, но идет постоянное проигрывание ding.wav, манипуляции скролом не дают никакого эффекта. Подскажите что не так?

12

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

В общем у меня работает:

CoordMode, Pixel
sndPath:="c:\Windows\Media\", path:="c:\GyJe.png", tint:="*"tSize:=60 . A_Space

#If isState
   WheelUp::
   WheelDown::
      If % A_PriorHotkey=A_ThisHotkey And A_TimeSincePriorHotkey<50
         Return
      TrayTip,, % tint:="*"(A_ThisHotkey~="Up" ? tSize+=5:tSize-=5)" "
      Return
#If

F4::
   SetTimer, SomeLabel, % (isState:=!isState) ? 1000:"Off"
   checkup:="started"
   Loop, % isState ? 1:2
      SoundBeep, 7500, 100
   KeyWait, % A_ThisHotkey
   Return

SomeLabel:
   ImageSearch,,, 0, 0, A_ScreenWidth, A_ScreenHeight, % tint . path
   If ErrorLevel
   {
      If ErrorLevel=1
      {
         If % checkup=1 Or checkup="started"
         {
            SoundPlay, % sndPath "ding.wav", 1
            checkup:=2
         }
      }
      Else
      {
         SetTimer,, Off
         MsgBox, 262192
               , % "An error occured"
               , % "Failure to open the image file`nor a badly formatted option!"
         ExitApp
      }
   }
   Else
   {
      If % checkup=2 Or checkup="started"
      {
         SoundPlay, % sndPath "tada.wav", 1
         checkup:=1
      }
   }
   Return

13 (изменено: elektrovenik, 2013-02-24 12:38:35)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Спасибо большое Вам Grey за участие. Ваш скрипт работает. Прихожу к выводу, что проблема заключается в самом приложении, ибо когда делаю скриншоты из него же - на скриншоте находит изменение в изображении отлично. Когда пытаюсь тоже самое сделать в приложении - снова получается чушь.

14

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Приложение полноэкранное?

15

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Grey пишет:

Приложение полноэкранное?

Да. Но есть возможность использования в оконном режиме. Я очень рад и благодарен, что Вы желаете помочь мне, в решении поставленной задачи. Предоставлю больше материала. Вот то окно, с которым используется скрипт + данные которые может предоставить Auto It.
http://i1.5cm.ru/c/0Chc.jpg
Ключевое изображение для работы скрипта :
http://i2.5cm.ru/i/PLHk.png
Еще точнее, я вырезал именно этот кусок http://i2.5cm.ru/i/nTWN.png
Именно это изображение используется как искомое. Мне хотелось бы сделать так, чтобы при изменении едицы, проигрывался звуковой файл. Как уже писал выше, когда прогоняю скрип по скриншоту - работает все отлично, когда тоже самое пытаюсь делать в окне приложения - скрипт не находит искомого изображения в окне, хотя разумеется оно там присутствует. Ваш последний скрипт, после регулировки величины оттенка от 150 и выше, начинает проигрывать аудиофайл, соотвествующий нахождению искомого изображения, но увы даже тогда, когда этого изображения там нет.

16 (изменено: Grey, 2013-02-25 12:31:24)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Выставьте в настройках родное разрешение и оконный режим, активируйте при фокусе на приложении код (F12, далее не обязательно чтобы фокус был на этом окне, это только для того, чтобы код развернул окно на весь экран, запомнил размеры и стиль, по завершению работы (Esc или выход в контекстном меню) окно восстановит свой прежний вид).

CoordMode, Pixel
sndPath:="c:\Windows\Media\", path:="c:\GyJe.png", tint:="*"tSize:=60 . A_Space

F12:: ; I/O
   If !hWnd
   {
      WinSet, AlwaysOnTop, Off, % "ahk_id"hWnd:=WinActive("A")
      WinGetPos, x, y, w, h, % "ahk_id"hWnd
      WinMove, % "ahk_id"hWnd,, 0, 0, A_ScreenWidth, A_ScreenHeight
      WinSet, Style, -0xC00000, % "ahk_id"hWnd
   }
   Loop, % (isEnable:=!isEnable) ? 1:2
      SoundBeep, 12500, 100
   SetTimer, SomeLabel, Off
   isState:=""
   KeyWait, % A_ThisHotkey
   Return

~Esc:: ; выход по удержанию, инче родная функция клавиши
   KeyWait, Esc
   If A_TimeSinceThisHotkey>750 ; величина удержания
   {
      WinMove, % "ahk_id"hWnd,, x, y, w, h
      WinSet, Style, +0xC00000, % "ahk_id"hWnd
      ExitApp
   }
   Return

#If isState
   WheelUp::
   WheelDown::
      If % A_PriorHotkey=A_ThisHotkey And A_TimeSincePriorHotkey<50
         Return
      TrayTip,, % tint:="*"(A_ThisHotkey~="Up" ? tSize+=5:tSize-=5)" "
      Return

#If isEnable
   F4::
      SetTimer, SomeLabel, % (isState:=!isState) ? 1000:"Off"
      checkup:="started"
      Loop, % isState ? 1:2
         SoundBeep, 7500, 100
      KeyWait, % A_ThisHotkey
      Return

SomeLabel:
   ImageSearch,,, 0, 0, A_ScreenWidth, A_ScreenHeight, % tint . path
   If ErrorLevel
   {
      If ErrorLevel=1
      {
         If % checkup=1 Or checkup="started"
         {
            SoundPlay, % sndPath "ding.wav", 1
            checkup:=2
         }
      }
      Else
      {
         SetTimer,, Off
         MsgBox, 262192
               , % "An error occured"
               , % "Failure to open the image file`nor a badly formatted option!"
         ExitApp
      }
   }
   Else
   {
      If % checkup=2 Or checkup="started"
      {
         SoundPlay, % sndPath "tada.wav", 1
         checkup:=1
      }
   }
   Return
elektrovenik пишет:

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

Вы можете вырезать искомое изображение с захватом в нём к примеру только чат (1/.

17 (изменено: elektrovenik, 2013-02-24 23:38:48)

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Еще раз хочу сказать большое спасибо Вам Grey за терпение и желание помочь! Зерно истины найдено, хоть и немного окольным путем. Натолкнули на него Ваши слова, о запуске приложения в оконном режиме. Если коротко - ни один из скриптов не работает правильно, если приложение запущенно в полноэкранном режиме (подозреваю что есть косяки в самом приложении, по части разрешения при полноэкранном режиме). В оконноме режиме, при различных разрешениях, все работает великолепно. Даже вот этот простейший вариант(на нем кстати, и остановился):

f5::
Loop
{
ImageSearch, Start_mark_X, Start_mark_Y, 0, 0, 1600, 900, чат 1600-900.png
if ErrorLevel = 2
    {
        MsgBox Нет картинки, с образцом изображения для поиска!
    }
else if ErrorLevel = 1
    {
        SoundPlay, zoidberg.mp3
        Sleep 5000
    }
}
return

f6::
pause

18

Re: AHK: Imagesearch, нужна помощь в отладке скрипта

Ro имеет защиту от ахк. Обходится путем активации другого окна, например нажатием клавиши windows. А далее уже работать с экраном.