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

> Вопрос по массивам и окнам
sel
сообщение 13.11.2018, 15:08
Сообщение #1


**

Neophyte
Сообщений: 32
Регистрация: 4.7.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.986
Возраст: 27



Вопрос в следующем, мне необходимо отследить количество запущенных окон игры, скрипт у меня ходит между окнами и выполняет разные задачи, ходит в цикле for.

Выглядит примерно так:

set %handle FindWindow ("Игра")
set #f 1
while (#f = 1)
for #i 1 size(%handle)
...
скрипт
...
end_for
end_while

Иногда случается так, что окно с игрой крашится с ошибкой, и скрипт заводит обратно вылетевшее окно с новым хендлом, в этом основная загвоздка, если бы не это обстоятельство то я бы мог записывать в массив %handle [#i 3] допустим цифру 0 если окно вылетело и проводить в цикле ещё один цикл for который бы складывал значения в столбце %handle [#i 3] и если оно будет равняться 0 то скрипт начнёт заводить все окна, но из за краша окон добавляется новая строчка в массиве с новым хендлом.

Задача - определить, что вылетели все окна игры, есть идеи как это можно сделать?
Заранее спасибо за ответ.

p.s. определить какое окно вылетело с ошибкой трудно, может вылететь абсолютно любое, всё что есть это хендл окна.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
sel
сообщение 29.12.2018, 0:48
Сообщение #2


**

Neophyte
Сообщений: 32
Регистрация: 4.7.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 18.986
Возраст: 27



Ииии, мне снова нужна ваша помощь друзья:)
Проблема: иногда пилот НЕНАХОДИТ окна, вот мой скрипт:

Код
init_arr %list (1 1) Персонаж1 Персонаж2 Персонаж3 Персонаж4 ... Персонаж(х)
set #listsize size(%list)
while (1 = 1)
for #j 1 #listsize
        set %handle FindWindow ("_ИГРА")
        set #handlesize size(%handle)
        set #result indexOf (%handle noabs (%list[#j 1]) )
        if #result = -1 and #handlesize < #listsize
            log Вылетел: %list [#j 1]
            stop_script
            gosub %list [#j 1] // перенаправление в подпрограмму для завода окна
            set #result 0
        end_if
    end_for
for #i 1 #handlesize  
.....
код
.....
end_for
end_while

:Персонаж1
...
код
...
return

:Персонаж(х)
...
код
...
return




Вот что пишут логи:

23:57:45 : while (1 = 1)
23:57:45 : for #j(18) 1 #listsize(18)
23:57:45 : set %handle FindWindow ("_ИГРА")
23:57:45 : %("_ИГРА") [ 19 1 ] =
23:57:45 : set #handlesize(18) size(%handle)
23:57:45 : #handlesize = 18
23:57:45 : set #result(1) indexOf (%handle noabs (%list[#j(1) 1]) )
23:57:45 : #result = 6
23:57:45 : if #result(6) = -1 and #handlesize(18) < #listsize(18)
23:57:45 : end_for
23:57:46 : set %handle FindWindow ("_ИГРА")
23:57:46 : %("_ИГРА") [ 19 1 ] =
23:57:46 : set #handlesize(18) size(%handle)
23:57:46 : #handlesize = 18
23:57:46 : set #result(6) indexOf (%handle noabs (%list[#j(2) 1]) )
23:57:46 : #result = 1
23:57:46 : if #result(1) = -1 and #handlesize(18) < #listsize(18)
23:57:46 : end_for
23:57:46 : set %handle FindWindow ("_ИГРА")
23:57:46 : %("_ИГРА") [ 19 1 ] =
23:57:46 : set #handlesize(18) size(%handle)
23:57:46 : #handlesize = 18
23:57:46 : set #result(1) indexOf (%handle noabs (%list[#j(3) 1]) )
23:57:46 : #result = 2
23:57:47 : if #result(2) = -1 and #handlesize(18) < #listsize(18)
23:57:47 : end_for
23:57:47 : set %handle FindWindow ("_ИГРА")
23:57:47 : %("_ИГРА") [ 0 0 ] = handle
23:57:47 : set #handlesize(18) size(%handle)
23:57:47 : #handlesize = 0
23:57:47 : set #result(2) indexOf (%handle noabs (%list[#j(4) 1]) )
23:57:47 : #result = -1
23:57:47 : if #result(-1) = -1 and #handlesize(0) < #listsize(18)
23:57:47 : Вылетел: Персонаж(х)
23:57:50 : stop_script


Подскажите, в каком направлении хоть копать, не понимаю из за чего это может происходить, если в отдельную вкладку вывожу указанный скрипт, он безошибочно находит все запущенные окна, если в общем скрипте так делаю, рано или поздно он не находит ни одного окна игры и решает, что они вылетели. В переменную %handle ничего кроме хендлов и имён окон не записываю.

Раньше было всё нормально, после каких то изменений в скрипте, перестал находить окна, уже ума не приложу в чём может быть дело.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
sel   Вопрос по массивам и окнам   13.11.2018, 15:08
sutra   Эту строку помести в while если тормозов не будет...   13.11.2018, 15:20
sutra   После анализа массива ненужный элемент можно удали...   13.11.2018, 17:46
sel   Есть где то примеры анализа массивов? Массив приме...   13.11.2018, 18:05
sutra   Я не совсем понял что именно надо. Смысл примерно ...   13.11.2018, 18:27
sutra   Можно отсортировать оба массива, тогда наверное ещ...   13.11.2018, 18:55
sel   Можно отсортировать оба массива, тогда наверное е...   13.11.2018, 19:39
DarkMaster   Его выдает винда при создании окна и он никак не ...   13.11.2018, 20:17
sutra   Опиши подробнее. Скрипт заводит или игра сама соз...   13.11.2018, 23:00
sutra   Ты можешь присвоить окну свой порядковый номер se...   13.11.2018, 23:11
cirus   Скобки не нужны. Тоже самое: set %handleold %han...   14.11.2018, 2:23
sel   Придумал более интересный способ определения вылет...   15.12.2018, 1:34
cirus   Откуда это? Запустить любое количество окон, в и...   15.12.2018, 2:40
sutra   Видимо проблема определения вылетевших окон не реш...   15.12.2018, 4:26
sel   В общем написал преемлемый для меня вариант(есть с...   17.12.2018, 16:16
sutra   Количество окон игры должно быть постоянным? или м...   15.12.2018, 4:59
sutra   Про ошибку конкретного примера кода уже более опыт...   15.12.2018, 5:14
DarkMaster   раньше пилотовский синтаксис отказывался восприни...   15.12.2018, 5:47
sutra   Ну на 100% не вникал, но логика правильная, если в...   17.12.2018, 18:22
sel   Итак, у меня новый затуп, пытаюсь красиво сохранят...   23.12.2018, 4:28
DarkMaster   [code]local write, writeIndent, writers, refCount;...   23.12.2018, 5:36
cirus   Дописывать пробелы в конец строки, чтобы все были...   23.12.2018, 5:39
sutra   Я бы порекомендовал использовать табуляцию. Прост...   23.12.2018, 13:10
DarkMaster   Проблема в том, что текстовые редакторы табуляцию...   23.12.2018, 13:41
sutra   Да вариантов полно, табуляция - это просто выравни...   23.12.2018, 14:08
sutra   Если конечно установлен эксель. Выбираешь вкладку ...   23.12.2018, 14:33
cirus   В папке с пилотом Scripts\Backup. Ищите рабо...   29.12.2018, 1:22
sutra   Ну если быстро (чисто для Вашего случая) не вникая...   29.12.2018, 3:29
sel   По прежнему сталкиваюсь всё с той же проблемой, ес...   28.2.2019, 0:26
cirus   Возможно в этом проблема. Попробуйте не использов...   28.2.2019, 1:34
sutra   Тоже хотел сказать про это, но и это не главное. И...   28.2.2019, 1:55
sel   Я вроде даже где-то 100% рабочий пример давал с ...   28.2.2019, 2:58
sutra   Подпрограмма в Пилоте - это собственно goto на мет...   28.2.2019, 2:27
sutra   findwindow ищет окна в том порядке, в котором они ...   28.2.2019, 2:47
cirus   2гб и вылет.   28.2.2019, 3:04
sutra   Ну хоть что-то, я тоже думал на эту тему. Всё-таки...   28.2.2019, 3:32
sel   Ну хоть что-то, я тоже думал на эту тему. Всё-так...   5.3.2019, 10:10
sutra   Голову на отсечение конечно давать не буду. Но иск...   28.2.2019, 3:42
sutra   Вот без всякого хвастовства говорю (хотя гордость ...   28.2.2019, 3:55
DarkMaster   gosub работает полностью корректно с циклами при ...   28.2.2019, 14:00
sel   Возникло несколько вопросов: 1. Можно ли команду l...   4.5.2019, 13:45
cirus   Нет, только txt.   4.5.2019, 14:06


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

 

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