979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||||
1 | ||||||
Быстрая эмуляция нажатия клавиш в боте для браузерки14.02.2013, 19:20. Показов 9185. Ответов 42
Метки нет (Все метки)
Пишу бота для браузерных танчиков.Прицеливание работает по принципу:через BitBlt копируется нужное окно в память, там ищутся группы пикселей определенного цвета(цвет имени врага), и если таковые найдены, нужно жать определенную кнопку(z или x) до тех пор, пока разница по абсциссе между центром имени противника и центром своих жизней(по ним определяется направление пушки), не станет меньше определенного числа(25 пикселей в данном случае). Эмуляцию нажатия клавиш реализую через PostMessage, ибо работать должно в неактивном окне. Все вроде пашет, но загвоздка в том, что пушка нередко "проезжает" цель, и начинается вертеться перед ней туда-сюда, то бишь PostMessage об отпускании клавиши не доходит вовремя. Сам алгоритм определения, когда надо остановиться, в ряд ли может быть неверным, ибо 100 раз проверен и в целом работает(то есть останавливается вовремя в тех случаях, когда пушка вертится медленнее обычного, либо просто удачно повернулась). Сообщения, которые я посылаю, полностью соответствуют аналогичным при реальном нажатии клавиш(через Spy++ проверялось). Кроме того при попытке эмулировать через keybd_event получилось ровно то же самое. Чего только не пробовал-и задержки разные, и сообщения, все то же самое. Скачал виртуальную клавиатуру-при попытке управлять с нее все работает нормально, то есть теоретически такая эмуляция возможна. Сразу скажу, что производительность при обработке изображения тут не причем, FPS достаточный, чтобы несколько кадров попало в положение, когда надо остановиться. На данный момент прога работает с гугл хромом, там проще однозначно достать хэндл нужного окна. Часть кода прилагается, желающим могу скинуть заготовку проги в личку. Жду ваших предположений, как это устранить, я пока что в тупике( но выход ищу. Заранее благодарен. Рабочие способы реализовать такое на других языках и по другим принципам тоже буду рассматривать, ибо делаю чисто ради развлечения и саморазвития, никуда не спешу. Эти куски кода миллион раз переписывались, на мелкие несуразности можете не обращать внимание, главное-указанный выше вопрос.
0
|
14.02.2013, 19:20 | |
Ответы с готовыми решениями:
42
Эмуляция нажатия клавиш для SDL Эмуляция нажатия клавиш для неактивного/свёрнутого приложения. Эмуляция нажатия клавиш для другого приложения (Win10 Под D3D) не работает Перехватчик клавиш + эмуляция нажатия клавиш |
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
18.02.2013, 13:47 [ТС] | 41 |
Ну тут я соглашусь, ибо был у меня один код на С, который я 3 раза переписывал и в результате он сократился с 3000 строк до 1200, при этом функциональность только выросла
А понять, что делает сей код, не зная даже близко игры, конечно крайней проблематично Но все равно спасибо, может что из него мне пригодится. Вопрос в том, что считать мусором. Та часть кода, которую мы обсуждали, по-моему не критична, но в целом, определенно, лишние константы и переменные, которые объявляются не там, где нужно, следует почистить при доводке кода, когда он перестанет менять постоянно глобально менять свою структуру и придет к чему-то определенному. Для форума я оставил ту часть функционала, которая не факт, что работает правильно, методы могу прокомментировать: t4-отвечает за движение танка вперед(при условии, что врага на экране нет) t5-отвечает за поворот пушки направо, если справа враг, либо если враг отсутствует на экране. t6 отвечает за поворот пушки влево, если слева враг, либо если враг отсутствует на экране. Если враг отсутствует-направление выбирается рандомно. Mozgi() соответственно определяет, какой из таймеров должен посылать нажатия, при помощи глобальных переменных bool e4 e5 e6. Запущен в бесконечном цикле отдельным потоком. Переменные pravo и minraznica.X описаны в коде, в них определена сторона и расстоние в пикселях от прицела до врага по абсциссе. Если эта разница в пикселях меньше 25ти-считается, что я стреляю туда, куда нужно.
0
|
Winhttp22
|
18.02.2013, 13:51
#42
|
Не по теме: EvilFromHell, дайте ссылку на игру
0
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
18.02.2013, 13:57 [ТС] | 43 |
0
|
18.02.2013, 13:57 | |
18.02.2013, 13:57 | |
Помогаю со студенческими работами здесь
43
Эмуляция нажатия клавиш. Эмуляция нажатия клавиш Эмуляция нажатия клавиш Эмуляция нажатия клавиш Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |