Вот пример рабочего кода который жмёт 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)