Автор Тема: привязка. окно перестало существовать. и чо делать?  (Прочитано 848 раз)

0 Пользователей и 1 Гость просматривают эту тему.

i0

  • Оплот сообщества
  • ****
  • Сообщений: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • Просмотр профиля
задачка
дано:
- в браузере всю страницу занимает игровое флеш-окно
- кликер привязан к флеш-окну и в нём прекрасно работает с анализом картинок (кликер видит флеш)
- как и положено флешу, флеш изредка слетает, и окно, к которому привязан кликер, перестаёт существовать

спрашивается: как распознавать данную ситуацию?

[spoiler]
Код: Clickermann
  1. #name "errortest"
  2. #logfile
  3. $nAnswer= dialogbox("наведите курсор на окно, привязываюсь", 0)
  4. $hWND= hget($_xmouse,$_ymouse)
  5. hset($hWND,1)
  6. hintpopup("привязался")
  7.  
  8. wndgetinfo($hWND, $nWPosX, $nWPosY, $nWWidth, $nWHeigth)
  9. logwrite("1. hWND=", $hWND, " nWPosX=", $nWPosX, " nWPosY=", $nWPosY, " nWWidth=", $nWWidth, " nWHeigth=", $nWHeigth)
  10. getscreen(100, 100, 200, 200)
  11. screenshotex(100, 100, 200, 200)
  12. if_picture_in(100, 100, 200, 200, "check.bmp")
  13. logwrite("есть фрагмент")
  14. else
  15. logwrite("нет фрагмента")
  16. end_if
  17.  
  18. keypress(#f5) // имитируем слёт флеш-плагина перезагрузкой страницы
  19. wait(3)
  20.  
  21. wndgetinfo($hWND, $nWPosX, $nWPosY, $nWWidth, $nWHeigth)
  22. logwrite("2. hWND=", $hWND, " nWPosX=", $nWPosX, " nWPosY=", $nWPosY, " nWWidth=", $nWWidth, " nWHeigth=", $nWHeigth)
  23. if_picture_in(100, 100, 200, 200, "check.bmp")
  24. logwrite("есть фрагмент")
  25. else
  26. logwrite("нет фрагмента")
  27. end_if
  28. getscreen(100, 100, 200, 200)
  29. screenshotex(100, 100, 200, 200)
  30.  
  31. hset($hWND,0)
  32. halt
[/spoiler]

4.11.003, skip_error=0 лог:
13:25:19 1. hWND=8848364 nWPosX=1920 nWPosY=54 nWWidth=1280 nWHeigth=940
13:25:19 есть фрагмент
13:25:23 2. hWND=8848364 nWPosX=4300968 nWPosY=42588832 nWWidth=4547396 nWHeigth=-42588832
13:25:23 есть фрагмент
после чего появляется окно ошибки
второй скриншот не создаётся

4.11.003, skip_error=1 
if_picture_in так же находит фрагмент после уничтожения окна
окна ошибки нет
второй скриншот не создаётся

4.13b2, skip_error=0
if_picture_in так же находит фрагмент после уничтожения окна
окна ошибки нет
второй скриншот создаётся, там сплошная чернота
(кстати, если не ограничивать область, это хороший способ подвесить комп, раз уж мой любимый load в 4.13 Джони выпилил)

так как распознавать ситуацию уничтожения связанного окна?
я ничего лучшего чем сделать sub-обёртку для if_picture_in не придумал, но это как-то очень удручает

i0

  • Оплот сообщества
  • ****
  • Сообщений: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • Просмотр профиля
2 Johnny
если б в данном случает всего лишь if_picture_in возвращал не true, а false, дальше я б обработал ситуацию

dramster

  • Герой форума
  • *****
  • Сообщений: 1037
    • Просмотр профиля
Цитировать
if_picture_in так же находит фрагмент после уничтожения окна
не пойму, почему тебя это удивляет? в буфере же остается скрин после первого гетскрина, того, что был сделан перед первым поиском картинки.
Цитировать
так как распознавать ситуацию уничтожения связанного окна?
а почему бы не проверять тем же размером или положением окна к примеру - nWPosX=4300968 nWPosY=42588832 nWWidth=4547396 nWHeigth=-42588832
это только то что пришло в голову в этот момент, думаю есть еще варианты, но нужно их тестить, не уверен. нет времени пока  :(.

i0

  • Оплот сообщества
  • ****
  • Сообщений: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • Просмотр профиля
Цитировать
а почему бы не проверять тем же размером или положением окна
ага. это я и имел в виду под sub-обёрткой
но так не хочется переписывать весь проект

Цитировать
не пойму, почему тебя это удивляет? в буфере же остается скрин после первого гетскрина, того, что был сделан перед первым поиском картинки.
о, спасибо. это мой косяк, что второй getscreen ниже второго if_picture_in оказался

и если с 4.11 всё плохо (даж если поднять getscreen на полагающееся ему место, всё равно результат проверки положительный)
то в 4.13 if_picture_in вернул ложь, как и хотелось. и без критической ошибки

буду надеяться что это штатное поведение, и оно сохранится в будущих релизах