|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||||||
Быстрая эмуляция нажатия клавиш в боте для браузерки14.02.2013, 19:20. Показов 10515. Ответов 42
Метки нет (Все метки)
Пишу бота для браузерных танчиков.Прицеливание работает по принципу:через BitBlt копируется нужное окно в память, там ищутся группы пикселей определенного цвета(цвет имени врага), и если таковые найдены, нужно жать определенную кнопку(z или x) до тех пор, пока разница по абсциссе между центром имени противника и центром своих жизней(по ним определяется направление пушки), не станет меньше определенного числа(25 пикселей в данном случае). Эмуляцию нажатия клавиш реализую через PostMessage, ибо работать должно в неактивном окне. Все вроде пашет, но загвоздка в том, что пушка нередко "проезжает" цель, и начинается вертеться перед ней туда-сюда, то бишь PostMessage об отпускании клавиши не доходит вовремя. Сам алгоритм определения, когда надо остановиться, в ряд ли может быть неверным, ибо 100 раз проверен и в целом работает(то есть останавливается вовремя в тех случаях, когда пушка вертится медленнее обычного, либо просто удачно повернулась). Сообщения, которые я посылаю, полностью соответствуют аналогичным при реальном нажатии клавиш(через Spy++ проверялось). Кроме того при попытке эмулировать через keybd_event получилось ровно то же самое. Чего только не пробовал-и задержки разные, и сообщения, все то же самое. Скачал виртуальную клавиатуру-при попытке управлять с нее все работает нормально, то есть теоретически такая эмуляция возможна. Сразу скажу, что производительность при обработке изображения тут не причем, FPS достаточный, чтобы несколько кадров попало в положение, когда надо остановиться. На данный момент прога работает с гугл хромом, там проще однозначно достать хэндл нужного окна. Часть кода прилагается, желающим могу скинуть заготовку проги в личку. Жду ваших предположений, как это устранить, я пока что в тупике( но выход ищу. Заранее благодарен. Рабочие способы реализовать такое на других языках и по другим принципам тоже буду рассматривать, ибо делаю чисто ради развлечения и саморазвития, никуда не спешу. Эти куски кода миллион раз переписывались, на мелкие несуразности можете не обращать внимание, главное-указанный выше вопрос.
0
|
||||||
| 14.02.2013, 19:20 | |
|
Ответы с готовыми решениями:
42
Эмуляция нажатия клавиш для SDL Эмуляция нажатия клавиш для неактивного/свёрнутого приложения. Эмуляция нажатия клавиш для другого приложения (Win10 Под D3D) не работает |
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 18.02.2013, 02:11 | |
|
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 02:18 [ТС] | |
|
Прочел бегло тему-там никаких нареканий на мой таймер не видно
Кроме того проблема точно так же возникала и без него, если поставить их быстрее-они будут спамить, но повиснет браузер с игрой. Кстати если спамить слишком быстро сообщения-то задержка становится заметно больше между посланными действиями и их выполнением. Поэтому можно предположить, что у браузера или игры есть какие-то приоритеты при обработке сообщений, и мои там почему-то обрабатываются медленно.
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 18.02.2013, 02:21 | |
|
EvilFromHell, что значит - спамить?
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
||
| 18.02.2013, 02:22 [ТС] | ||
|
public static System.Timers.Timer t4 = new System.Timers.Timer(60);
и this.timer3 = new System.Windows.Forms.Timer(this.components); Разницы не видишь? ![]() Добавлено через 31 секунду
0
|
||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 18.02.2013, 02:28 | |
|
EvilFromHell, да я уже понял. вот почитал - http://www.rsdn.ru/forum/info/FAQ.dotnet.timers существуют три таймера, и твой таймер ничем не отличается от system.threading.timer .
0
|
|
|
Master of Orion
|
||||||
| 18.02.2013, 02:40 | ||||||
|
Winhttp22, формовский таймер работает в потоке формы (что логично), в крайнем случае, синхронизируется, т.к. очевидно, что в формах будут применяться только синхронные события из-за проблем с доступом к граф. ресурсам из нескольких потоков.
Добавлено через 1 минуту EvilFromHell, код тоже радует ![]()
0
|
||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|||
| 18.02.2013, 02:50 [ТС] | |||
Если видите конкретные ошибки - запостите их, буду рад![]()
0
|
|||
|
Master of Orion
|
||||||
| 18.02.2013, 02:58 | ||||||
0
|
||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 03:02 [ТС] | |
|
Местами не соглашусь.
int virtual_code = MapVirtualKey(0x11, 1); зачем эта строка там, если не факт, что она понадобится? логичнее засунуть внутрь. А остальное все выглядит так из-за того, что копипастилось 1000 раз и менялось, куда удобнее менять что-то в таком виде, чем распихивать каждый раз по местам.
0
|
|
|
Master of Orion
|
||
| 18.02.2013, 03:06 | ||
|
EvilFromHell, дублирование кода - слышали о таком? Если программа работает в 2 раза дольше, но в ней нет ни одного куска дублированного когда (хотя так не бывает, максимум - 5% замедления) - то это в 99,99999% случаев оправдано. В крайнем случае профайлер найдет узкое место, и понятную, готовую к сопровождению программу будет гораздо проще сделать и понятнее и быстрее, чем оригинал. Я вон тоже в 15 лет думал "о, объявлю-ка я переменную цикла типа byte, у меня массив маленький, сэкономлю 3 байта, а то нафиг мне целый int объявлять". А про выравнивание по 4 байта, написание сопровождаемого кода и неявное преобразование счетчика к инту - я даже и не слышал. Не повторяйте детских ошибок. C# - язык для человека, хотите писать язык, понятные только машине - ASM ждет.
0
|
||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 03:22 [ТС] | |
|
Слышать-то я слышал, и соглашусь, что это актуально в большом проэкте, который пишет не 1 человек и где другим возможно придется разбираться в немалом количестве твоего кода. Кроме того при изменении я скорее всего забуду удалить строчку сверху, и она останется мусором висеть в коде.
Когда ты пишешь один и код требует опитимизации- по-моему странно было бы заниматься такими вещами. А параметр для постмессаджа можно было бы запихать внутрь, но так исторически сложилось, потому что раньше параметр для нескольких мессаджей был одинаковый, а потом я изменил его. Можно конечно было для форума код подредактировать, но я не думал, что у кого-то вызовет затруднения прочесть.
0
|
|
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 10:42 [ТС] | |
|
http://msdn.microsoft.com/en-u... 85%29.aspx
Если почитать это, либо быть в курсе написанного - все станет ясно
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||||
| 18.02.2013, 12:46 | ||||||
|
Psilon, я тоже когда писал раньше бота для одной игры, то там тоже ыциг что разберешь
но он работает, а это самое главное
0
|
||||||
|
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
|
|
| 18.02.2013, 13:08 [ТС] | |
|
Разобрать код можно, вот только я пока не пойму, для какой игры он предназначен, если не секрет-название бы
![]() Но конечно не с 1ого взгляда, он длиннее моего в 3 раза и не особо комментирован ![]() Добавлено через 2 минуты Да и массивов у меня в коде особо нет-одни условия и bool перменные. Остальное все вырезано для простоты
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|
| 18.02.2013, 13:15 | |
|
EvilFromHell, название игры не скажу. комментариев конечно не много, но я в этом коде понимаю, а это главное.
а если вы на форум вылаживаете свой код, то конечно стоит его подредактировать, так как другие его иогут не разобрать, и не помочь вам. массивы я сделал для удобства. их три и они одинаковые. сейчас я бы сделал класс в отдельном файле, чтобы читабельность была лучше + сократить его. и еще может быть что вынес в отдельный класс...
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||||
| 18.02.2013, 13:43 | |||||
|
Psilon, ахаха.
![]()
![]() так что - более уместен к вам. вы проводите цитату профессионала, который работает программистом, и который просто обьязан писать правильно. притом еще о группе программистов говорит, странно что вы этого не заметили. я же любитель.
0
|
|||||
| 18.02.2013, 13:43 | |
|
Перехватчик клавиш + эмуляция нажатия клавиш Эмуляция нажатия клавиш. Эмуляция нажатия клавиш Эмуляция нажатия клавиш Эмуляция нажатия клавиш Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|