controlsend в играх
Здравствуйте!
Скажите пожалуйста как можно в играх отлавливать поля ввода, кнопки и т.д. и т.п. Допустим известная всем игра World of Warcraft Захожу в неё с Au3info и отлавливаю поле ввода, в итоге получаю следующее: Код:
>>>> Window <<<< Код:
ControlSend("World of Warcraft", "", "GxWindowClassD3d", "kjhgkjh") Или хотябы как сделать так чтобы можно было отловить с помощью hotkeyset и тут же выслать нажатие этой клавиши используя макрос @HotKeyPressed, но чтобы hotkeyset не вызвался повторно после нажатия этой клавиши. |
самый банальный пример:
Код:
#region: - Include + офф сайт, там смотрел? 1 2 3 4 5 и т.д. |
Цитата:
Можно попробовать так: Код:
ControlSend("[CLASS:GxWindowClassD3d]", "", "", "kjhgkjh") Цитата:
Код:
HotKeySet("g", "Test_Func") |
Цитата:
|
Цитата:
Код:
Send(@HotKeyPressed) Код:
msgbox(0, "", @HotKeyPressed) Код:
FileWrite($fileopen, @HotKeyPressed) Как это исправить? |
Цитата:
|
Цитата:
т.е. когда ставлю русскую раскладку клавиатуры. Как это исправить? |
Цитата:
|
ну дак мне нужно отловить если нажимаются определённые клавиши нужно их записать в другой текстовик, среди них есть и русские и английские буквы. Как я потом в этом текстовике отличу какие символы были нажаты русские или английские?
|
Цитата:
Код:
Func Test_Func() |
спасибо
|
И всёже как можно отследить окно игры? нужно чтобы когда пользователь войдёт под своим логином в игру запустить функцию. Титла у окна игры нету, пробовал через отслеживал HANDLE, но он всегда одинаковый. Может можно както отслеживать изменения в памяти процесса? Я просто в этом не понимаю, научите плиз...
|
morgan1991, просотй пример чтения памяти: http://forum.ru-board.com/topic.cgi?...40&start=520#2
а так, попробуй спросить у парня: Belfigor au3, - у него те же задачи............ |
Вложений: 1
proxy, не работает выдаёт такое:
|
все забываю...вот она:
запишите это в новый файл NomadMemory.au3 и сохраните в папку: C:\Program Files\AutoIt3\Include\ эт только пример, вот основа, посмотрите адреса параметров ячеек памяти, может найдется то, что нужно... и думаю эти ребята, что с для Wow уже кучу всякого наделали, могут мнооооогое подсказать.. Цитата:
а вот полей вода или кнопок - не получится, т.к. в обычных окнах кнопочки обробатывает виндовс api (если не ошибаюсь), а в играх - это уже как то на уровне виде адаптера/драйверов... |
я уже качал эту прогу только так и не понял как её пользоваться и что она вообще должна делать.
|
Параметры и создание окон и кнопок можно отследить...теоретически
Самы "простой" способ это см. за трафиком игры...на сколько мне известно ВоВ общается с сервером пакетами...в зависимости от того какой пакет идет от сервера/к серверу можно достаточно точно(без особых задержек) определять происходящие в игре... Для этого небходимо внедрить в процесс свою dll, котрая в свою очередь будет как фильтр, при прохождение пакета нужного вида отправлять в твою програму этот пакет...боле или менее читаемом виде) Все это теория и может сильно отличатся от реальности и от назначения топика |
проще говоря - все значения: сколько здоровья, сколько патронов и т.д. - это, по идее, вытаскивается из памяти процесса.
т.е. в памяти есть место - ячейка - где храниться значени, к примеру: "10 HP" и т.д. - вот это можно прочитать зная адрес этой самой ячейки памяти. ...так же, не мало вероятно, может быть возможно, по аналогии - прочитать из памяти какой сейчас пользователь залогинился.... либо все это определять другими методами. просто там на офф форуме уже много разработок по wow, может уже, что то и есть из отго, что ищите. попробуйте точнее описать задачу...вместе и подумаем.. |
дак куда уж точнее мне всегото надо узнать что пользователь ввёл логин пароль и нажал вход. Отловить нажатие мышки или ентера не предлогайте уже думал над этим.
|
хз....на офф форуме только прутся с подобной задачи ))
можно попробовать через PixelGetColor - но это будет муторно и много риска.... |
самое лучшее сделать через процесс, но я не могу... **(((
|
А как на счет следить за появление процеса example.exe ? а при его появление отследить отправление клавиши Enter(при условии не нажатия на кнопку в окне)
|
.:TimoXa:., я же сказал что думал над этим... А если пользователь нажмёт не ентер а мышкой???
|
morgan1991, а что мешает отследить сетевую активность приложения! Стоит ему (приложению) установить соединение,которое и будет означать нажатие кнопки "вход" /Enter и после этого и начать выполнение скрипта...надо щас подумать как реализовать...
... While 1 $ConnectedSocket = TCPAccept( $MainSocket) If $ConnectedSocket >= 0 Then msgbox(0,"","Client Connected") Call("function") exit EndIf Wend Func Function() msgbox(0,"","You are loginIn") EndFunc $MainSocket в данном случае будет портом который открывает программа для обмена пакетами с сервером |
Цитата:
Код:
If _IsPressedEx("01|{Enter}") Then... |
.:TimoXa:., а если игра шлет данные не в явном виде....?
тут же нужно определить какой логин/ пароль зашел в игру... Цитата:
написать обычную прогу - которая будет харнить логин и пароль пользователей и эта же прога будет запускать игру и вводить логин и пароль...- так уже будет известно какой аккаунт вошел в игру.... |
proxy, поддерживаю...это единственный способ выполнять те задачи которые требуются имхо....
Пришел в голову 1 вариант..но не знаю может не подойдет... Опять же ждем запука процесса...а потом отлавливаем нажатия кнопок до появления сетевой активности...после чего в логе ищем нужную комбинацию и запускаем ту функцию кот. нужна для данного акка..собстно бред но всеже...как вариант... |
Цитата:
Цитата:
|
Сделал так:
Код:
Global $MainSocket = 8085 |
Цитата:
|
Цитата:
Может всёже както можно отследить сетевую активность? |
Тут на форуме autoit появилась программа которая считывает инфо из игры..может быть получится ее приладить таким образом что по ее принципу получать инфо о акке и пото запускать нужный скрипт...
Как вариант сейчас допишу то что пытался предложить.... |
TCPStartUp()
ProcessWait("wow.exe") msgbox(0,"","RUN") ;----Сюда нужно будет вставить следилку за нажатиями клавиш пишущую в log.txt--- Call("net") Func net() While 1 $ConnectedSocket = TCPAccept("127.0.0.1:8085") If $ConnectedSocket >= 0 Then msgbox(0,"","Client Connected" & $ConnectedSocket) Call("function") exit EndIf Wend EndFunc Func Function() msgbox(0,"","You are loginIn") EndFunc Это должно работать проверь если так то будем дальше думать... |
|
Время: 05:35. |
Время: 05:35.
© OSzone.net 2001-