Делал автокликер для игры, вот относительно универсальное простое решение.
Чтобы не мучится в начале выскакивает окошко - тащишь его чтобы было над нужным окном и жми "ОК", далее скрипт копает и подбирает даже в неактивном окне...
import threading, time
import win32api, win32con, win32gui
import pyautogui as pag
import keyboard as kb
import tkinter as tk
def get_window_at_mouse_pos():
x, y = win32api.GetCursorPos()
window_id = win32gui.WindowFromPoint((x, y))
return window_id
def send_key(key_code, window_handle):
# win32api.SendMessage(window_handle, win32con.WM_CHAR, key_code, 0)
# win32api.PostMessage(window_handle, win32con.WM_CHAR, key_code, 0)
pag.press(chr(key_code))
print(key_code)
def mining():
while True:
time.sleep(1)
while is_e.get() == 1:
send_key(ord('e'), window_handle)
time.sleep(3)
send_key(ord('q'), window_handle)
time.sleep(65)
root = tk.Tk()
canvas1 = tk.Canvas(root, width=300, height=200, bg='lightsteelblue2', relief='raised')
canvas1.pack()
is_e = tk.IntVar()
checkbox = tk.Checkbutton(root, text="Капать", variable=is_e, font=('helvetica', 18))
canvas1.create_window(150, 160, window=checkbox)
win32gui.MessageBox(None, 'start', 'Message Box', 0)
window_handle = get_window_at_mouse_pos()
print(window_handle)
win32gui.SetForegroundWindow(window_handle) # hwnd
threading.Thread(target=mining, daemon=True).start()
root.mainloop()