Подтвердить что ты не робот

Как программа может управлять другой программой?

Боты, как они работают? Говорят ли они видеоигры нажатой клавише или щелкнули мышь?

Если нет способа указать программе другую программу, нажата клавиша? Я хотел бы сделать программу, чтобы побить какую-то игру. Поэтому оцениваются любые ресурсы или примеры.

Обновление: Итак, один из способов - эмулировать нажатия клавиш, так что же это за методы (на любом языке)?

4b9b3361

Ответ 1

Я написал кучу ботов в тот или иной момент (из игр Pogo в Yohoho Puzzle Pirates). Для окон вы обычно отправляете события Win32 для имитации движений мыши или обманываете фактически низкоуровневые сообщения, посланные между окнами, когда мышь фактически нажата. Очень многое зависит от того, как реагирует программа (приняв сообщение с координатами или, в случае Java, сразу же прочитав координаты мыши). Компонент "автоматизация" обычно включает в себя чтение экрана и эвристику или алгоритмы для определения состояния, но также может быть так же хорош, как обнюхивание пакетов (много информации там в плохих реализациях в покере) или как хакерство, как прямое чтение памяти. Довольно большое "поле", и плохо документировано, поскольку это довольно выгодно и не сложно попасть.

Отправка ввода

C/С++ (в Windows)

Для ключей попробуйте CodeProject:

http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx

И сообщения:

http://www.codeproject.com/KB/threads/sendmsg.aspx

Лучше всего научиться отправлять сообщения с помощью Win32 API, а затем использовать что-то вроде Spy ++ или его производных для "обратной инженерии", как нажатия клавиш и движений мыши отправляются в окно.

Java

Java имеет удивительно портативный класс Robot, способный:

  • Прочитайте пиксели с экрана.
  • Управляйте мышью.
  • Отправить ключи.

Я бы дал этот шанс, если вы ищете быстро и легко.

Основная логика

Это описано в другом месте в Интернете по глубине, но большинство ботов следуют за простым потоком программ государственной машины. Вы читаете экран (или пакеты или память), узнаете, какое "состояние" вы используете на основе ваших чтений и прошлых данных, выполняете вычисления и отправляете результат обратно в программу.

Чтение экрана может быть затруднено, но может быть сделано легче, если вы считаете, что много раз, есть несколько "удачливых" пикселей относительно окна, которые дадут вам представление о том, в каком состоянии находится программа. Процесс поиска этих пикселей может быть автоматизирован.

Ответ 2

Некоторые программы (например, те, которые измельчают вас в MMORPG), просто имитируют нажатия клавиш. Инструментом для этого является AutoIt.

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

Ответ 3

Есть несколько видов ботов. Из того, что я помню, когда я играл в CS (давно, давно)

Некоторые боты используют библиотеки самого приложения для проверки среды (карты, где игроки и т.д.). Боты также используют библиотеку для управления движением. Я сомневаюсь, что есть много реализаций бота, которые вызывают мышиные сообщения, чтобы сказать игре, как двигаться и т.д.

Некоторые боты эмулируют протокол уровня приложения (если это мультиплеер). Иными словами, игра даже не нужна. Бот может работать в виртуальной игре.

Я собираюсь противостоять тому, что предложил другой плакат: писать игровой бот, вероятно, более ценное упражнение, чем игра в игру, и любопытно, как они работают, является хорошим знаком.:)

Ответ 4

Самый большой недостаток этой концепции - не вход, а выход игры. Ваш бот не может просто случайно нажимать клавиши, он должен знать, что происходит. Очень мало игр позволяют вам запрашивать эти данные, которые оставят вашего бота в решении очень сложной проблемы. Преобразование 60 кадров в секунду 2D визуальных данных в виртуальное пространство.

Есть активные игры, которые не только позволяют бот-игрокам, но и поощряют их. Open RTS является одним из них, но есть и более простые, такие как GUN -TACTYX и crobots, которые являются хорошими отправными точками.

Ответ 5

Боты будут действовать как клиенты к игре (серверу). Затем они могут отправлять соответствующие данные так же, как пользователь может отправлять вручную. Бот (клиент) будет анализировать данные с сервера ( "кто-то собирается атаковать слева" ) и т.д. Затем клиент должен иметь возможность вычислить лучший ход и отправить соответствующие данные серверу для его выполнения.

Я не уверен, что это будет работать со всеми играми.

Ответ 6

Это очень зависит от игры. Например, я сделал бота для Travian (который является онлайн-игрой), который использовал Internet Explorer activeX для автоматизации ходов. Я worte приложение в С# и, чтобы заставить его заняться, заняло около 30 минут. Это просто, чтобы вызвать методы на activeX, чтобы заставить его делать такие вещи, как заполнение текстовых полей или щелчок по кнопкам. Для входа в систему, например, я использовал следующее:

var inputs = web.Document.GetElementsByTagName("input").
                        Cast<HtmlElement>();
var nume = inputs.First(h => h.GetAttribute("type") == "text");
var pass = inputs.First(h => h.GetAttribute("type") == "password");
var login = inputs.First(h => h.GetAttribute("type") == "image");
var form = web.Document.GetElementsByTagName("form")[0];

nume.SetAttribute("value", "user");
pass.SetAttribute("value", "pass");
login.InvokeMember("Click");

Для тех игр, которые основаны на настольных играх, все усложняется. Windows разрешает одному приложению отправлять сообщения другому приложению, поэтому я предполагаю, что вы можете использовать это для отправки сообщений в игру (хотя это работает для игр, в которых DirectX используется для ввода, я не знаю)

Ответ 7

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

Ответ 8

Когда вы говорите "управляйте программой", подумайте о том, как управляются программы. Большинство из них принимают ввод клавиатуры/мыши.

Если вы пишете программу для имитации ввода клавиатуры/мыши, вы идете.

Следствием этого было бы то, что если программа приняла аргументы, переданные через поле ввода, напишите программу для отправки аргументов, как если бы они были отправлены через окно ввода.

Так работают все боты. Надеюсь, он проливает свет для вас!

Изменить: так работает огромное количество ботов: -)

Ответ 9

Вы можете эмулировать движения/клики мыши и ввод клавиатуры в Java с классом Robot. Он также позволяет снимать снимки экрана.

Ответ 10

Я думаю, AutoIT - отличный язык для такого рода программ. Хотя я не использовал его для создания ботов, отправка кликов и клавиш была очень простой.

Ответ 11

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

Ответ 12

Для этого вам нужно знать программирование. Однако есть программы, которые позволяют вам программировать визуально. Для них вам не нужно программировать. Примером может служить программа Kibor. Он разработан специально для ваших целей и имеет визуальный редактор, с помощью которого вы можете создавать боты с блок-диаграммами. Описание программы Kibor

Скриншот Kibor

У него много готовых функций для ботов. Существует даже встроенный модуль распознавания текста Скриншот Kibor. Распознавание текста