|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||||
Быстрая эмуляция нажатия клавиш в боте для браузерки14.02.2013, 19:20. Показов 10120. Ответов 42
Метки нет (Все метки)
Пишу бота для браузерных танчиков.Прицеливание работает по принципу:через BitBlt копируется нужное окно в память, там ищутся группы пикселей определенного цвета(цвет имени врага), и если таковые найдены, нужно жать определенную кнопку(z или x) до тех пор, пока разница по абсциссе между центром имени противника и центром своих жизней(по ним определяется направление пушки), не станет меньше определенного числа(25 пикселей в данном случае). Эмуляцию нажатия клавиш реализую через PostMessage, ибо работать должно в неактивном окне. Все вроде пашет, но загвоздка в том, что пушка нередко "проезжает" цель, и начинается вертеться перед ней туда-сюда, то бишь PostMessage об отпускании клавиши не доходит вовремя. Сам алгоритм определения, когда надо остановиться, в ряд ли может быть неверным, ибо 100 раз проверен и в целом работает(то есть останавливается вовремя в тех случаях, когда пушка вертится медленнее обычного, либо просто удачно повернулась). Сообщения, которые я посылаю, полностью соответствуют аналогичным при реальном нажатии клавиш(через Spy++ проверялось). Кроме того при попытке эмулировать через keybd_event получилось ровно то же самое. Чего только не пробовал-и задержки разные, и сообщения, все то же самое. Скачал виртуальную клавиатуру-при попытке управлять с нее все работает нормально, то есть теоретически такая эмуляция возможна. Сразу скажу, что производительность при обработке изображения тут не причем, FPS достаточный, чтобы несколько кадров попало в положение, когда надо остановиться. На данный момент прога работает с гугл хромом, там проще однозначно достать хэндл нужного окна. Часть кода прилагается, желающим могу скинуть заготовку проги в личку. Жду ваших предположений, как это устранить, я пока что в тупике( но выход ищу. Заранее благодарен. Рабочие способы реализовать такое на других языках и по другим принципам тоже буду рассматривать, ибо делаю чисто ради развлечения и саморазвития, никуда не спешу. Эти куски кода миллион раз переписывались, на мелкие несуразности можете не обращать внимание, главное-указанный выше вопрос.
0
|
||||||
| 14.02.2013, 19:20 | |
|
Ответы с готовыми решениями:
42
Эмуляция нажатия клавиш для SDL Эмуляция нажатия клавиш для неактивного/свёрнутого приложения. Эмуляция нажатия клавиш для другого приложения (Win10 Под D3D) не работает |
|
62 / 62 / 5
Регистрация: 05.01.2013
Сообщений: 235
|
|
| 14.02.2013, 22:03 | |
|
я думаю, что это не лучшее решение - снятие скринов. как альтернативу - смотри в сторону - http://rghost.ru/42782537 . там можно и пиксели поискать без снятия скринов, и нажатия клавиш окну поотправлять
1
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 14.02.2013, 22:26 [ТС] | |
|
Спасибо, как разберусь что там к чему-отпишусь. У кого еще будут предложения-пишите
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|||||||||||
| 17.02.2013, 19:21 [ТС] | |||||||||||
|
Если кому не лень, поясните пожалуйста, как этой библиотекой по ссылке воспользоваться, у меня как ни подключай-то один эксепшен то другой.
Добавлено через 1 час 4 минуты Нашел наконец-то на иностранном форуме как подключать такую библиотеку. Надо оказывается было качать отсюда http://www.autoitscript.com/site/autoit/downloads/ инсталлятор, а потом регистрировать вручную AutoItX3.dll вот так: regsvr32 "полный путь к dllке". Потом уже идешь в ссылки и выбираешь ее среди COM объектов, и тогда только она начинает пахать. Добавлено через 16 часов 3 минуты Если кто уже в курсе, объясните пожалуйста, как подать хэндл окна куда-нибудь в аутоите, ибо вот такой код:
Не пашут так же любые попытки подать туда уже найденый апишными функциями хэндл. Хотелось бы пример.Если найду как это сделать-отпишусь, а то в сети что-то мало инфы по шарпу с аутоитом. Добавлено через 9 часов 25 минут
0
|
|||||||||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||
| 17.02.2013, 21:30 | ||
|
EvilFromHell, ну там же документация была с библиотекой. она проста в использовании, и довольно удобна для работы с окнами, допустим - мне надо было найти окно одного процесса, а окно не имело заголовка, и тд. с помощью либы можно получить все окна процесса. я просто не представляю, как это бы выглядело на вин апи. наверное нужно было бы тонну кода писать
а тут пару строчек - и все готово.Добавлено через 25 секунд насчет регистрации библиотекы - хз., проверю у себя и отпишусь Добавлено через 15 минут Добавлено через 6 минут да при отмене регистрации либа не работает видимо эта библиотека просто вызывает функции из оригинальной а я то думал...
0
|
||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||
| 17.02.2013, 22:01 [ТС] | ||
Пока что как корректно что-либо отослать при помощи этой библиотеки я еще не разобрался, но было мало времени, еще разберусь. По умолчанию конкретно эта функция шлет WM_CHAR на который игра не реагирует и к тому же активирует окно, а мне надо в неактивное слать.Документацию может быть я кривовато читал, но там нигде не написано про корректную подачу хэндла в эту функцию. В файле в архиве по ссылке про него не сказано ни слова в описании функции, а уж тем более про вызов ее из C#. Кроме того как именно ту библиотеку подключить, что по ссылке, я так и не врубился. Если про корректную эмуляцию в неактивное окно общеизвестно-отпишись пожалуйста, как это, чтобы долго не искать ![]() И еще на счет пикселей интересно-реально узнать цвет пикселей в окне, которое не отображено(под другими) и быстрее чем указанным в первом посте способом? или можно не возиться, все равно не выйдет? Добавлено через 4 минуты Забыл среду написать-студия 2010. Добавлено через 12 минут Кстати на счет хэндла-у меня он имеет тип IntPtr, и найден через апи. А про эту хитрую форму записи так просто не догадаешься, в студии просто как стринг выглядит, никаких пояснений.
0
|
||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||||||||||
| 17.02.2013, 22:12 | ||||||||||||
я так понимаю - нужен бот, чтобы работал и можно было еще кое что на компьютере делать? чтобы не "блокировал" комп? игра на флеше? ее можно же разобрать и написать бота без этих всех поисков пикселей. хотя если "разобрать" - то это наверное уже выходит за рамки закона, и за рамки этого форума. типо взлом же Добавлено через 1 минуту
0
|
||||||||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|||||||||||
| 17.02.2013, 23:07 [ТС] | |||||||||||
![]() Да и хочется сделать так, чтобы бот никак не зависел собственно от игры, ее версий, пакетов, структуры и тд, раз это теоретически можно реализовать таким способом. Чтобы был прост как дубина-нажал кнопку и все катается, а юзер при этом делает что хочет ![]() Игру вероятно видели в инете-танки онлайн зовется. Добавлено через 4 минуты Добавлено через 26 минут
Мой пост внизу глянь Если известен заголовок-то это 2 строчки: GetWindow и GetWindowRect.
Добавлено через 12 минут
0
|
|||||||||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||||
| 18.02.2013, 00:25 | |||||
с этими пикселями. где то какое то окно вылезет вверх и бот не будет работать, как надо. я говорил, что нужно разобрать игру, и смотреть, как можно бота сделать.
Добавлено через 2 минуты да насчет функции той. что мешает использовать заголовок окна, а не хендл?
0
|
|||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||
| 18.02.2013, 00:47 [ТС] | ||||
Гибкой настройки пока не нашел там.
но зато весело и познавательно, ведь управление чужими приложениями мне еще миллион раз пригодится.
0
|
||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||||||||
| 18.02.2013, 01:14 | ||||||||||
|
EvilFromHell, под файтастикой я имел ввиду - окно свернутое, и что бы бот исал пиксели.
Добавлено через 9 минут кстати, я тут подумал. ты же делаешь скрины, а потом пробегаешь по пикселям и ищещь нужны да? а ты не думал, что иногда просто не успевает программа найти пиксель, от этого тормоза при нажатии мыши? может нужно как то распараллелить поиск? ну там в несколько потоков запускать чтоли Добавлено через 1 минуту
0
|
||||||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||||||
| 18.02.2013, 01:18 [ТС] | ||||||||
.Добавлено через 2 минуты Эти таймеры вроде бы запускаются в своем потоке, их там аж 3 вида.. по крайней мере дело тут по-моему не в них( Я кроме таймеров чего только не пробовал.
0
|
||||||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||
| 18.02.2013, 01:25 | ||||
0
|
||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||
| 18.02.2013, 01:33 [ТС] | ||||
0
|
||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||
| 18.02.2013, 01:41 | |||
ну если снимает скрин с окна нижнего - тогда ок
0
|
|||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||
| 18.02.2013, 01:50 [ТС] | ||
0
|
||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||||
| 18.02.2013, 02:03 | ||||||
|
а я вот сделал тестовое приложение
если бы цикл запускал в отдельном потоке - то такого бы не случилосьвывод - таймер не создает поток, а использует тот, из которого он вызван
0
|
||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 02:04 [ТС] | |
|
Ты глянь свой таймер и мой, они разные и из разных пространств имен
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 18.02.2013, 02:08 | |
|
и почитай - несколько таймеров в программе? . у тебя операции попросту ставятся в "очередь" возможно изза этого и тормозит.
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 02:09 [ТС] | |
|
Но даже у твоего таймера тики хоть и в одном потоке работают, но относительно друг друга-асинхронно, что легко проверить выведя мессадж бокс.
0
|
|
| 18.02.2013, 02:09 | |
|
Помогаю со студенческими работами здесь
20
Перехватчик клавиш + эмуляция нажатия клавиш Эмуляция нажатия клавиш. Эмуляция нажатия клавиш Эмуляция нажатия клавиш Эмуляция нажатия клавиш Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|