Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Ожидание окна, которое то ли будет, то ли нет...
Bu3apD
сообщение 14.12.2016, 14:37
Сообщение #1


*

Registred
Сообщений: 2
Регистрация: 14.12.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.237



Есть некая игра, в которое при определенном действии может появиться окно, которое надо закрыть. А может и не появиться - тогда надо продолжать выполнение скрипта.

Вопрос: как скрипт может понять, что окно появилось? Учитывая возможное запаздывание окна из-за лагов.

Я пока что остановился на таком варианте:
Код
while #frndX1 #frndY1 6082795 993874           // жмем кнопку если она активна
left #frndX1 #frndY1 10 7 70 7 abs
wait 10 + random(300)                         // не палимся :)
for #i 1 5                                    // цикл ожидания окна
  if #btnX #btnY 7362636 13417910                 // кнопка [X] того окна, которое надо закрыть, если оно появится
    #blprnts #blprnts + 1
    init_arr %a (1) day . month . year _ hour . min . sec
    printscreen 0 0 0 0 0 $path%a [1].jpg
    wait 1s
    left #btnX #btnY 7 7 7 7 abs                  // жмем [X] в окне
  end_if
  wait 100 + random(300)
end_for
end_while

То есть в цикле тупо жду появления окна. Время идет. И процесс занимает больше времени, чем если делать все ручками... (IMG:style_emoticons/default/sad.gif)

Может есть вариант лучше? Что скажете?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 14.12.2016, 15:28
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



Искать окно в виде картинки. Не обязательно всё окно, достаточно какую-то часть.
Код
set #a 0
set #time timer + 3000                // 3000 = 3 сек
while #a = 0 and #time > timer        // пока не появится картинка или не прошло 3 секунды
    set #a findimage(0 0 1920 1080 (C:\image.bmp) %a)     // поиск картинки
    hint #a      // это можно убрать
    wait 10
end_while
if #a > 0
    // тут действия если окно появилось
end_if
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 14.12.2016, 15:48
Сообщение #3


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21045
Пользователь №: 16.156



а как же православный findwindow ? к чему велосипед с findimage ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 14.12.2016, 16:01
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



А если игра 3d, в которой окна без имени и класса?
Также не у всех есть окон есть имя. По классу findwindow ищёт не всё и не факт, что найдёт только 1 такое окно. Проверять на принадлежность к родителю ещё больше проблем. Остаётся только плагин.
А вариант с findimage на 100% будет работать.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 14.12.2016, 23:09
Сообщение #5


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21045
Пользователь №: 16.156



Ну конкретно не указана что за игра, так что я лишь предположил.
findwindow же возвращает результат сортированный по последней активности. Следовательно, поймать выскакивающее окно можно.

Поиск родителя :

знаем основной хендл игры.
Код

//findwindow()
set #parent getwindow(#handle OWNER)
if(#parent = <осн.хендл>)
    log 1
else
    while (#parent > 0)
        set #parent getwindow(@handle)
    end_while
end_else


думаю, логика понятна.


а вот findimage() еще от игры зависит. фильтры мож какие игра наложит или еще что-то. так что тут гемороя не меньше может быть.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Bu3apD
сообщение 15.12.2016, 9:23
Сообщение #6


*

Registred
Сообщений: 2
Регистрация: 14.12.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.237



Спасибо за подсказки!
Немного оптимизировал время ожидания, выход из for по break добавил, когда окно появилось (хз почему сразу не сообразил)

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

Нашел на вики скрипт поиска дочерних окон
http://uopilot.tati.pro/index.php?title=%D...%BA%D0%BD%D1%83

Браузер - открытая игра - да, находит родительское-дочернее.
А внутри игры не видит он никаких окон...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 15.12.2016, 18:41
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27679
Пользователь №: 11.279



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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zhurb
сообщение 25.12.2016, 17:30
Сообщение #8


*

Registred
Сообщений: 2
Регистрация: 25.12.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.255
Возраст: 21



Ребятки, всем привет!)
Надеюсь тут есть знающие люди, которые смогут помочь первопроходимцу(ну почти), когда-то использовал UOPilot чисто на клики, но вот теперь стала задача посложнее - нужно написать макрос.

На картинке я примерно указал что к чему. Есть окно, куда нужно ввести номер купона, потом пройти небольшую капчу - ввиде "клацни в квадрат", после чего нужно клацнуть на кнопку проверить.

На уровне логики - вроде всё ясно, но вот как правильно это всё написать?

Действия должны быть таковы :
0. Задаём переменную с которой должен начинаться отсчёт( в нашем случае купон)
1. Создаем цикл, где указываем что нужно считать от номера купона до конечного номера с шагом 1
2. Говорим : клацни в область "введите номер вашего купона" и введи переменную с номером купона
3. клацни на квадрат с капчей
4. клацни на кнопку "проверить"
5. ?? тут не много не знаю как это сделать, но нужно "если есть надпись "Ставки отсутствуют!", то продолжить цикл, а если отсутствует - закончить цикл и написать "бинго" или что-то такого или вообще ничего не писать(IMG:style_emoticons/default/smile.gif)

Я думаю для тех кто шарит - тут дело минут 15 (IMG:style_emoticons/default/cool.gif) , буду благодарен за помощь) Всех с Наступающим!)


(IMG:http://i.imgur.com/PDP7tmn.png)

В моем варианте выскакивает ошибка :
16:26:10 0 (autosaved_0.txt, 0): set - (0): Не могу определить имя переменной


у кого не открывается изображение введу код сюда, который я набросал

Код
set a# 1230700000
for #i a 1230709999 1
set #a #a + 1
left 450, 257
sendex #a
left 416, 318
left 593, 396
end_for


Сообщение отредактировал Zhurb - 25.12.2016, 17:40
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.12.2016, 18:00
Сообщение #9


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



Цитата
set a# 1230700000
for #i a 1230709999 1

Исправить на:
Код
set #a 1230700000
for #i #a 1230709999 1

Цитата
5. ?? тут не много не знаю как это сделать, но нужно "если есть надпись "Ставки отсутствуют!", то продолжить цикл, а если отсутствует - закончить цикл

Можно использовать Findimage.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zhurb
сообщение 25.12.2016, 18:06
Сообщение #10


*

Registred
Сообщений: 2
Регистрация: 25.12.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.255
Возраст: 21



Цитата(cirus @ 25.12.2016, 17:00) *

Исправить на:
Код
set #a 1230700000
for #i #a 1230709999 1


Можно использовать Findimage.

Cпасибо за такой быстрый ответ!)
Да, не внимательно описал переменную а, но после исправления ничего не меняется (IMG:style_emoticons/default/sad.gif)

Пишет что не может : (autosaved_0.txt, 0): set - (0): Не могу определить имя переменной

После чего становится активным курсор перед первым set..

Касательно Findimage - там фраза "Ставки отсутствуют!" - идёт как текст

Решил просто попробовать без цикла
Касательно вставки значение в поле - ни say ни sendex - не вставляет почему-то значение (IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.12.2016, 18:42
Сообщение #11


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26691
Пользователь №: 16.971
Возраст: 29



Цитата
Касательно Findimage - там фраза "Ставки отсутствуют!" - идёт как текст

Искать текст в виде картинки тоже можно.
Цитата
Касательно вставки значение в поле - ни say ни sendex - не вставляет почему-то значение

Sendex только в активном окне работает. Т. е. если пилот на переднем плане, то ничего печататься не будет.
Попробуйте send или send217.
И лучше бы wait добавить после кликов.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.4.2024, 15:11
Designed by Nickostyle