@deepandwide

Кликер в свернутом окне?

Нужно написать кликер который будет просто делать клик левой кнопки мышки в свернутом окне игры, казалось бы такое уже точно есть, но я ниче не нашел. Все ходят вокруг да около, пишут какие то философские тексты в три абзаца с решением этого но ни одной строчки кода или примера как это реализовать не нашел. Нужен код на питоне, обычный кликер который будет делать клик раз в пару секунд в свернутом окне игры
  • Вопрос задан
  • 999 просмотров
Пригласить эксперта
Ответы на вопрос 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
В свернутом окне сделать клик можно только если это окно считывает клик из сообщений окна и только если это в винде, в других ОС системное API немного по-другому работает. Все, других вариантов нет, кроме как взлома самого процесса игры. Большинство игр, особенно трехмерных, используют различные API для работы с пользовательским вводом - в некоторых случаях эмуляция проходит через эти API, в некоторых - нет. А еще в играх, особенно в онлайновых, предпринимают специальные меры для противодействия эмуляции ввода и читерам, что еще больше усложняет написание ботов для игр, но не делает это невозможным. Иногда достаточно стандартного API, иногда - нужен драйвер в ринг ноль, чаще - реверсинг и взлом самой игры.
Для начала надо определить, каким именно образом игра работает с пользовательским вводом и уже после этого искать возможность его эмуляции.
Ответ написан
YaPA24
@YaPA24
IT эксперт
Вот пример рабочего кода который жмёт e и q в неактивном окне добывает ресурс пока я зарабатываю реал:
import win32api
import win32con
import win32gui
import time

def get_window_at_mouse_pos():
    x, y = win32api.GetCursorPos()
    window_handle = win32gui.WindowFromPoint((x, y))
    return window_handle

def send_key(key_code, window_handle):
    win32api.PostMessage(window_handle, win32con.WM_CHAR, key_code, 0)

def main():
    win32gui.MessageBox(None, 'start', 'Message Box', 0)
    window_handle = get_window_at_mouse_pos()
    send_key(69, window_handle) # e
    while True:
        send_key(69, window_handle) # e
        time.sleep(1)
        send_key(ord('q'), window_handle) # q
        time.sleep(5)

if __name__ == '__main__':
    main()


С кликами сложнее - по мимо нажатий нужны координаты и как правило требуется чтобы окно было активным...
непроверенный код:
# Задаем координаты клика
x, y = 100, 100

# Получаем размеры окна
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
width, height = right - left, bottom - top

# Вычисляем координаты клика относительно левого верхнего угла окна
abs_x, abs_y = left + x * width // 100, top + y * height // 100

# Устанавливаем фокус на окно, чтобы оно стало активным
win32api.SetForegroundWindow(hwnd)

# Отправляем сообщение нажатия левой кнопки мыши
win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, abs_y << 16 | abs_x)

# Отправляем сообщение отпускания левой кнопки мыши
win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, abs_y << 16 | abs_x)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы