Всем привет.
Есть некий софт, а именно игра. И у неё есть проприетарный античит.
Есть в WinAPI такая вещь, как mouse_event() или же его современный аналог SendInput().
В игру мне нужно программно сделать клик, или много кликов, но не за короткий промежуток времени, а по возникновению определенного события.
До недавнего времени всё было нормально. Но теперь античит научился блокировать программный ввод после нескольких кликов. Количество установить не удалось, всегда по-разному.
Долгие тесты с различными вариантами ни к чему не привели. Т.е. античиту без разницы, проходит 10 кликов с интервалом каждого в 20мс или 1000мс, через 5-6 кликов ввод будет заблокирован.
Под блокировкой я подразумеваю такое поведение: прогнали мы несколько кликов, античит блокнул. Теперь, если мы попробуем вызвать клик(mouse_event, например), то в окне игры ровно ничего не произойдет. Именно в окне игры. Можно продолжать слать клики и свернув игру обнаружить, что клики действительно делаются, но развернув игру - опять, ничего.
Через некоторое время(опять же, установить не удалось) блокировку "отпускает" и можно прогнать еще парочку кликов. А еще можно не ждать и перезапустить программу, которая шлет клики(работает не всегда).
Весь гугл облизал, вариантов решения не нашел.
Есть интересная особенность. У меня клавиатура, на которой на дополнительные кнопки можно писать макросы. Если сделать что-то вроде:
Click
Goto 1
То в игру эти клики проходят без проблем. В таком макросе примерно 100-150 кликов в секунду.
Не особо представляю как это реализовать, но я пока что вижу один вариант: написать\найти драйвер для мыши, либо его эмуляцию.
UPDATE 1:
На основе предположения
@xandox, выяснилась довольно интересная особенность.
Предположим что античит заблокировал клики.
Сворачиваем игру, делаем один клик в любом месте(пусть это будет скайп, браузер или блокнот).
Разворачиваем игру - античит пропустит один клик.
Сворачиваем игру, делаем семь любых кликов.
Разворачиваем игру, античит пропустит семь кликов.
И так далее, 3-3, 5-5, 50-50.
Что это и как объяснить - пока не знаю.