Вопрос Отправить нажатие в неактивное окно

Новичок
Статус
Оффлайн
Регистрация
14 Окт 2022
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Здравствуйте, передо мной стоит задача отправить нажатие клавиши в неактивное окно. Использую win32api и всякие другие win32 (con, gui и т.д.), отправляю SendMessage'ом (PostMessage не работает). У меня есть pid, handle, название окна и название процесса. Работает только в активном окне.

Окно одно и дочерних окон не имеет! Есть только главное окно. Хендл точный!

Есть кусочек кода (не назову его своим), который работает только в активное окно: (не умею тут вставлять код)
import win32gui
import win32api
import win32con
import time

time.sleep(2)
def click(x, y):
hwnd = win32gui.FindWindow(None, 'RAGЕ Мultiрlayеr') # Получает хендл окна

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

time.sleep(0.3)

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

win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam)
time.sleep(5)
win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, lParam)

time.sleep(0.3)

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

win32api.SendMessage(hwnd, win32con.WM_CHAR, 0x44, 0)


click(933, 586)
 
Начинающий
Статус
Оффлайн
Регистрация
21 Мар 2021
Сообщения
171
Реакции[?]
16
Поинты[?]
2K
Здравствуйте! Для того, чтобы отправить нажатие клавиши в неактивное окно, нужно использовать функцию SendMessageTimeout вместо SendMessage
вот например с отправкой клавиши W
Код:
import win32gui
import win32api
import win32con

def send_key(hwnd, key):
    lParam = 0
    wParam = key
    result = win32api.SendMessageTimeout(hwnd, win32con.WM_KEYDOWN, wParam, lParam, win32con.SMTO_ABORTIFHUNG, 100)
    if result == 0:
        print("Failed to send keydown message")
    else:
        result = win32api.SendMessageTimeout(hwnd, win32con.WM_KEYUP, wParam, lParam, win32con.SMTO_ABORTIFHUNG, 100)
        if result == 0:
            print("Failed to send keyup message")

hwnd = win32gui.FindWindow(None, 'RAGЕ Мultiрlayеr')

send_key(hwnd, ord('w'))
ты можешь поменять параметр key в функции send_key, чтобы отправить другую клавишу. Надеюсь помог!
 
Сверху Снизу