Как привязать скрипт python к окну игры?

Сделал афк бота для игры, что бы там чай поставить или чего еще, ну крч что бы из комнаты меня не кикнуло пока я там хожу. Ну вот я все сделал, работает, не кикает. Но все это дело работает только при активном окне игры, то есть я не могу с включенным афк ботом свернуть игру и чекнуть вк, надо как то привязать работу к самому окну игры к самой игре а как это сделать я не знаю , вот код афк бота:
import time
import win32api
import keyboard
import winsound
from ctypes import windll
import ctypes
import random



def off():
	print('ВЫКЛЮЧЕНО')
	time.sleep(0.25)
	while True:
		time.sleep(0.05)
		if win32api.GetAsyncKeyState(0x04):
			print('        ')
			winsound.Beep(830,480)
			active()



def active():
	print('ВКЛЮЧЕНО')
	time.sleep(0.25)
	while True:
		time.sleep(0.05)
		if random.randint(0,100) > 96:
			win32api.mouse_event(1, random.randint(-600,600),random.randint(-600,600))
			win32api.mouse_event(1, random.randint(-600,600),random.randint(-600,600))
			
			windll.user32.mouse_event(2, 0, 0, 0, 0)
			time.sleep(0.04)
			windll.user32.mouse_event(4, 0, 0, 0, 0)

		if win32api.GetAsyncKeyState(0x04):
			winsound.Beep(390,480)
			off()

off()


Вопрос как его привязать к игре, что бы все работало даже при свернутой игре?
  • Вопрос задан
  • 1819 просмотров
Решения вопроса 1
@Aress9
Задача не такая уж и простая, но реализовать возможно.

Я дам описание как я сделал нажатие клавиши в блокноте. Для ваших задач вы должны сами придумать реализацию.

Первое что понадобиться сделать, это получить идентификатор окна для дальнейшего с ним взаимодействия. Используем функцию FindWindow передавая первым параметром None, а вторым заголовок окна, его можно посмотреть используя Spy++ или WinSpy++.
hwnd = win32gui.FindWindow(None, "Безымянный – Блокнот")

Второе, найти класс окна, куда требуется отсылать сообщения (вам возможно не понадобится). Для этого используем функцию FindWindowEx. В моём случае требуется подкласс "Edit", его название также можно получить с помощью WinSpy++.
editClass = win32gui.FindWindowEx(hwnd, None, "Edit", None)

Чтобы отправить сообщение о каком-либо действии в окно, используйте функцию SendMessage. Передавая ему идентификатор класса, само действие, и дополнительные к нему параметры(подробнее смотрите в документации к WinApi). Просто отправить команду может не сработать, в таком случае проследите сообщения вводимые вами в окно с помощью Spy++.
win32gui.SendMessage(editClass, win32con.WM_CHAR, 0x7A, 0) #Ввод символа 'z' в класс "Edit"


Весь мой код:
import win32gui
import win32con

hwnd = win32gui.FindWindow(None, "Безымянный – Блокнот")
editClass = win32gui.FindWindowEx(hwnd, None, "Edit", None)
win32gui.SendMessage(editClass, win32con.WM_CHAR, 0x7A, 0)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы