Вопрос Как отправить клик мыши или нажатие кнопки на клавиатуре в свернутое окно? [Python]

Новичок
Статус
Оффлайн
Регистрация
7 Янв 2021
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Делаю бота для игры. Сделал основную логику. Теперь интересует вопрос о его фоновой работе.
Нужно чтобы бот посылал различные ивенты в окно игры, не разворачивая его.

Нашел код и немного преобразовал его:

Python:
import win32gui
import win32api
import win32con
import time


def click(x,y):

    hWnd = win32gui.FindWindow("Notepad", None) # Получает хендл окна

 

    hwndChild = win32gui.GetWindow(hWnd, win32con.GW_CHILD) # Получает хендл дочернего окна

 

    lParam = win32api.MAKELONG(x, y) # Задает координаты клика

 

    time.sleep(0.3)

 

    # Кликает по координатам

    win32api.PostMessage(hwndChild, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)

    win32api.PostMessage(hwndChild, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, lParam)

    time.sleep(0.3)

    # Пишет нужную букву

    temp = win32api.SendMessage(hwndChild, win32con.WM_CHAR, 0x44, 0)





click(100,100)
На блокноте работает. Когда я пытаюсь провернуть все тоже самое с окном игры - никакой реакции. Но если окно игры развернуто - он кликает мышью/пишет букву, и то, только в чате самой игры.

Дочернего окна у игры нет. Только основное (ну либо они спрятаны, я в этом не силён)
Возможно тк это DirectX игра, он принимает только непосредственное нажатие с клавиатуры.
А вот клики и нажатия на уровне системы не выполняются.

Есть у кого-то идеи или познания в этом?

UPDATE: Вопрос решил сам. Тему можно не удалять, вдруг кому код понадобится.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
13 Янв 2021
Сообщения
30
Реакции[?]
5
Поинты[?]
0
Было бы не плохо публиковать решения.
В большинстве случаев никак нельзя управлять игрой в свёрнутом режиме (хуки не рассматриваются), но можно задвинуть окно за рабочий стол (до определённой версии вин 10, после этой версии можно создать отдельный рабочий стол с помощью "представления задач" и на нём разместить все нужные окна а работать на другом рабочем столе.
 
Начинающий
Статус
Оффлайн
Регистрация
3 Май 2023
Сообщения
2
Реакции[?]
0
Поинты[?]
0
Делаю бота для игры. Сделал основную логику. Теперь интересует вопрос о его фоновой работе.
Нужно чтобы бот посылал различные ивенты в окно игры, не разворачивая его.

Нашел код и немного преобразовал его:

Python:
import win32gui
import win32api
import win32con
import time


def click(x,y):

    hWnd = win32gui.FindWindow("Notepad", None) # Получает хендл окна



    hwndChild = win32gui.GetWindow(hWnd, win32con.GW_CHILD) # Получает хендл дочернего окна



    lParam = win32api.MAKELONG(x, y) # Задает координаты клика



    time.sleep(0.3)



    # Кликает по координатам

    win32api.PostMessage(hwndChild, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)

    win32api.PostMessage(hwndChild, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, lParam)

    time.sleep(0.3)

    # Пишет нужную букву

    temp = win32api.SendMessage(hwndChild, win32con.WM_CHAR, 0x44, 0)





click(100,100)
На блокноте работает. Когда я пытаюсь провернуть все тоже самое с окном игры - никакой реакции. Но если окно игры развернуто - он кликает мышью/пишет букву, и то, только в чате самой игры.

Дочернего окна у игры нет. Только основное (ну либо они спрятаны, я в этом не силён)
Возможно тк это DirectX игра, он принимает только непосредственное нажатие с клавиатуры.
А вот клики и нажатия на уровне системы не выполняются.

Есть у кого-то идеи или познания в этом?

UPDATE: Вопрос решил сам. Тему можно не удалять, вдруг кому код понадобится.
Ну и как же ты это сделал?
 
Сверху Снизу