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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Автопривязка Пилота К Окну
saraconor
сообщение 11.12.2009, 0:18
Сообщение #1


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



подскажите, как сделать чтобы пилот привязывался к открытому окну линейки.
пишу такой скрипт:
exec D:\.......\l2.exe // загружаем линейку
wait 10s
а дальше что делать?
пробывал:
set WorkWindow (PID) - тут воспринимаются только цифры, кроме PID не нашел что туда ставить.
ShowWindow
не помогает. окно не становится активным, текст внутри не набирается, крокодил не ловится, кокос не растет((
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 11.12.2009, 6:59
Сообщение #2


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Код
set #a findwindow (Lineage II)
if #a > 0
    set workwindow #a
    end_script
else
    msg Can't find Lineage II window.
    end_script
end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
saraconor
сообщение 12.12.2009, 12:51
Сообщение #3


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



спасибо, помогло!
хм. а вот с блокнотом ничего не получилось, хотя его вписал заместо линейки)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
saraconor
сообщение 12.12.2009, 14:03
Сообщение #4


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



Цитата(WKnight @ 11.12.2009, 6:59) *

Код
set #a findwindow (notepad)
if #a > 0
    set workwindow #a
    end_script
else
    msg Can't find notepad window.
    end_script
end_if


ничего не вышло.
кстати, как быть если нужно заатачить 2 разных скрипта к 2-м разным окнам линейки? при том что называются они одинаково Lineage II, а PID постоянно меняется при запуске новых окон.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 12.12.2009, 14:13
Сообщение #5


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3100
Пользователь №: 7.166



На счет блокнота. Там разве не по заголовку окна идет поиск? Соответственно не "notepad", а что-нить вроде "Текстовый документ - Блокнот". Я впрочем могу ошибаться, но каг бе вроде оно вот как-то так
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
saraconor
сообщение 12.12.2009, 19:04
Сообщение #6


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



Цитата(Soteric @ 12.12.2009, 14:13) *

На счет блокнота. Там разве не по заголовку окна идет поиск? Соответственно не "notepad", а что-нить вроде "Текстовый документ - Блокнот". Я впрочем могу ошибаться, но каг бе вроде оно вот как-то так

да ты прав.
а как тогда быть с 2 одинаковыми окнами линейки? они же называются одинаково в процессах.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 12.12.2009, 19:50
Сообщение #7


**********

Группа: Администраторы
Наличность: 0
Пользователь №: 1.833



Ответ прост: никак.

Самый правильный вариант будет наверное атачиться во время запуска.

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

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


--------------------
Discord: tatikom
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
saraconor
сообщение 13.12.2009, 1:02
Сообщение #8


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



а как вообще можно из пилота копатся в памяти приложения? про такое слышал, но в хелпах не нашел объяснений. вот например я так понимаю: в памяти мелькает чат, и нужно например в этом чате найти слово "пирожок", ну скажем цикл крутится, ищет пирожок, а как только найдет -stop_script -как это сделать? (процесс Lineage II, путь D:\софт\l2.exe)

зачем нужна кнопка "?" в хелповом меню?

для чего нужны массивы?

Цитата(Destruction @ 12.12.2009, 19:50) *

Самый правильный вариант будет наверное атачиться во время запуска.

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

новые процессы ложатся один поверх другого так?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 13.12.2009, 7:27
Сообщение #9


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Кстати ...
Код

set $caption Безымянный - Блокнот
set #a findwindow ($caption)
if #a = #a.5
    set #a getwindow ( #a first )
    set $var getwindowtext (#a)
    
    while ($var <> $caption) and (#a > 0) or (#a = #a.5)
        set #a getwindow ( #a next )
        set $var getwindowtext (#a)
    end_while
    
    if #a > 0
        set workwindow #a
        showwindow
    end_if
end_if
end_script

В данном случае окна делятся со скриптом №5.

'readmem <variable> <adress> <type> <size>'. читает с указанного адреса переменную указанного типа.
Вспоминая ультиму, могу сказать, что окошко чата найти будет скорее всего не очень просто... Правда сложность поиска никак не связана с данной командой (IMG:style_emoticons/default/smile.gif)

"?" нужна для поиска параметров персонажа и последнего сообщения от сервера игры Ультима Онлайн, в полуавтоматическом режиме.

Про массивы вопрос к Дестракшену, он на них собаку съел (IMG:style_emoticons/default/smile.gif)

В данном случае нас интересуют скорее не процессы а окна, их порядок меняется при переключении окон.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
saraconor
сообщение 14.12.2009, 4:22
Сообщение #10


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



Цитата(WKnight @ 13.12.2009, 7:27) *

'readmem <variable> <adress> <type> <size>'. читает с указанного адреса переменную указанного типа.

можно подробнее с примером?
readmem - команда, тут все ясно
variable - не понятно совсем, какие-то вариации...
adress - я так мпонял что это путь к папке где игра лежит?
type - какой тип процесса в таком случае ищется? что нужно писать? ddl, bsa, или еще что?
size - для чего нужен этот параметр, и нужно ли вообще его указывать?

скобочки <> нужны и работают как разделители так? или можно без скобок
вот... извини, синтаксис я выучил только на половину от силы) с памятью вообще не работал не разу.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 14.12.2009, 9:10
Сообщение #11


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



скобочки <> указывают на то, что заключенный между ними параметр является обязательным и не может отсутствовать. при написании команды такие скобочки опускаются, если не оговоорено иное.

readmem <variable> <adress> <type> <size>
читает с указанного адреса <adress> переменную <variable> указанного типа <type>. если тип - строка, то необходимо указать размер <size>. при возникновении ошибки, переменная будет содержать значение '-1'. B:byte = 1b; W:word = 2b; D:dWord= 4b; C:char = 1b; S:String = 1-255b;

readmem #dl 0x073BAA8 byte
if #dl <> 0
writemem 100 0x073BAA8 byte
end_if
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Warstone
сообщение 14.12.2009, 10:35
Сообщение #12


*********

Группа: Модераторы
Наличность: 0
Пользователь №: 10.905
Возраст: 25



Кстати... Кнайт, у тебя адреса абсолютные или смещение относительно базы для процесса рабочего окна?


--------------------
Do. Or do not. There is no Try!
© Master Joda, Dagobah, Star Wars: Episode V.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
saraconor
сообщение 14.12.2009, 12:34
Сообщение #13


***

Novice
Сообщений: 72
Регистрация: 30.10.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.180



Цитата(WKnight @ 14.12.2009, 9:10) *

readmem #dl 0x073BAA8 byte

где тут адрес?
что такое 0x073BAA8 и где это найти?
где тут тип?

фактически в скрипте присутствует команда которая чтото привязывает к переменной #dl -больше ничего не понятно. причем #dl ведь переменная, и по твоему синтаксису ей место после адреса, в таком случае где адрес?

Уважаемый Дестракшен, расскажите пожалуйсто о массивах, их реальное применение, если можно то с примером и отвлеченным сравнением (для доходчивости)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 14.12.2009, 14:15
Сообщение #14


**********

Группа: Администраторы
Наличность: 0
Пользователь №: 1.833



А что сразу я?

WKnight тут где-то выкладывал мою с ним переписку столетней давности на эту тему..


--------------------
Discord: tatikom
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 16.12.2009, 10:16
Сообщение #15


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Адреса относительные, такие например артмани выдает. С абсолютными из пользовательского режима нет смысла работать.

Хм, как из этого синтаксиса следует, что дл должна быть после адреса?
readmem <variable> <adress> <type> <size>
Адреса проще искать с помощью ArtMoney.

Массивы
https://forum.uokit.com/index.php?showtopic=16290
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 21.12.2009, 3:36
Сообщение #16


***********

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



По поводу нескольких окон линейки. Писал достаточно объемный скрипт на кучу всего и одной из функций было корректное обращение с кучей окон. Схема реализации простая - ищем окна по названию, записываем в массив хэндл окна(окно переименовываем), ищем следующее окно, снова в массив и снова переименовываем.
Советую так же проверять нет ли соответсвия в массиве найденому хэндлу, т.к. линейка любит возвращать свое родное название окна.
Окна найдет в обратном порядке просмотра. Например вы играли СХ, альтабнулись на сорку, потом на бд. Поиск окон найдет сначала БД потом Сорку и только потом СХ.


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


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



А у меня такая проблема:
в заголовке окна присутствует "©" и никак пилот не хочет находить окно. По PID находит отлично и после смены названия заголовка тоже все ок.
Можно ли как-то изменить заголовок насомвсем (чтобы при запуске приложения было название без "©"?) или научить пилот распознавать этот значек? )
заранее благодарю за ответ (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.1.2010, 21:07
Сообщение #18


***********

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



Цитата
добавил функцию 'FindWindow (<заголовок окна | PID>)'. возвращает хендл окна, необходимый предыдущей команде. заголовок окна следует указывать полностью, с соблюдением регистра символов. если нужное окно не найдено, то регистронезависимо ищем указанную строку в начале названия всех окон. поиск в скрытых окнах зависит от состояния переключателя "Показывать все окна". если опять ничего не нашли, то считаем, что указан PID процесса и ищем первое попавшееся окно этого процесса.

Как вариант можно указать кусок текста ДО @. По идее окно будет найдено... Правда если кусок очень маленький, то теоретически можно найти неправильное окно, начинающееся на те же буквы.


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


**

Neophyte
Сообщений: 23
Регистрация: 21.12.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.317



Цитата(DarkMaster @ 26.1.2010, 21:07) *

Как вариант можно указать кусок текста ДО @. По идее окно будет найдено... Правда если кусок очень маленький, то теоретически можно найти неправильное окно, начинающееся на те же буквы.

в том то и проблема что знчек копирайта 1-й(( а pid не постоянный(
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KuKa
сообщение 28.1.2010, 4:19
Сообщение #20


*

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



Уважаемые скриптописцы, возник такой вопрос: Как заставить пилот автоматически привязываться к Flash приложению? То есть есть браузер, в нём есть флешка (Конкретно легенда в контакте), всеми указанными способами эта задача не выпоняется. То есть пило цепляется к окну браузера, а не к флэшке. При этом при помощи Ctrl+A всё работает. ???
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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