Author Topic: привязка. окно перестало существовать. и чо делать?  (Read 2506 times)

0 Members and 1 Guest are viewing this topic.

i0

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

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

[spoiler]
Code: (clickermann) [Select]
#name "errortest"
#logfile
$nAnswer= dialogbox("наведите курсор на окно, привязываюсь", 0)
$hWND= hget($_xmouse,$_ymouse)
hset($hWND,1)
hintpopup("привязался")

wndgetinfo($hWND, $nWPosX, $nWPosY, $nWWidth, $nWHeigth)
logwrite("1. hWND=", $hWND, " nWPosX=", $nWPosX, " nWPosY=", $nWPosY, " nWWidth=", $nWWidth, " nWHeigth=", $nWHeigth)
getscreen(100, 100, 200, 200)
screenshotex(100, 100, 200, 200)
if_picture_in(100, 100, 200, 200, "check.bmp")
logwrite("есть фрагмент")
else
logwrite("нет фрагмента")
end_if

keypress(#f5) // имитируем слёт флеш-плагина перезагрузкой страницы
wait(3)

wndgetinfo($hWND, $nWPosX, $nWPosY, $nWWidth, $nWHeigth)
logwrite("2. hWND=", $hWND, " nWPosX=", $nWPosX, " nWPosY=", $nWPosY, " nWWidth=", $nWWidth, " nWHeigth=", $nWHeigth)
if_picture_in(100, 100, 200, 200, "check.bmp")
logwrite("есть фрагмент")
else
logwrite("нет фрагмента")
end_if
getscreen(100, 100, 200, 200)
screenshotex(100, 100, 200, 200)

hset($hWND,0)
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

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

dramster

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

i0

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

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

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

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