Вопрос по скрипта Python
Написал программу для ГТА 5 которая должна управлять транспортом по мини карте заставил скрипт распознавать фиолетовую метку на экране и на основе этого дал команду ехать по метке, но столкнулся с проблемой того что когда я захожу в ГТА и оно видит метку скрипт срабатывает и начинает нажимать W чтобы ехать вперёд, но нажимает оно его на рабочем столе, из-за чего происходит страшная вакханалия, нужен совет как сделать чтобы оно видело ГТА и кликало именно в ней, разрешения экрана 1920 X 1080, или может кто-то поможет с фиксом данной проблемы вот код
import pyautogui
import keyboard
import win32gui
import win32con
# Переменная для хранения состояния скрипта
script_enabled = False
# Функция для получения идентификатора окна GTA 5
def get_gta_window():
return win32gui.FindWindow(None, "Grand Theft Auto V") # "Grand Theft Auto V" - это заголовок окна GTA 5
# Функция для активации окна GTA 5
def activate_gta_window(hwnd):
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
win32gui.SetForegroundWindow(hwnd)
# Захват экрана
def capture_screen():
screenshot = pyautogui.screenshot(region=(0, 0, 1920, 1080))
frame = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
return frame
# Распознавание метки на мини-карте
def detect_marker(image):
# Преобразуем изображение в цветовое пространство HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Определяем нижний и верхний порог для фиолетового цвета (в HSV)
lower_purple = np.array([130, 50, 50])
upper_purple = np.array([170, 255, 255])
# Создаем маску для фиолетового цвета
mask = cv2.inRange(hsv, lower_purple, upper_purple)
# Находим контуры объектов на изображении
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Если найден хотя бы один контур, считаем его меткой и возвращаем его координаты
if contours:
c = max(contours, key=cv2.contourArea)
x, y, w, h = cv2.boundingRect(c)
marker_x = x + w // 2
marker_y = y + h // 2
return marker_x, marker_y
else:
return None, None
# Управление нажатиями клавиш
def control_character(marker_x, marker_y):
character_x, character_y = 960, 540 # Предположим, что центр экрана - это положение персонажа
if marker_x is not None and marker_y is not None:
print(f"Метка обнаружена. Координаты: x={marker_x}, y={marker_y}")
if marker_x > character_x:
pyautogui.keyDown('d')
elif marker_x < character_x:
pyautogui.keyDown('a')
if marker_y > character_y:
pyautogui.keyDown('s')
elif marker_y < character_y:
pyautogui.keyDown('w')
else:
print("Метка не обнаружена")
# Если метка не обнаружена, отпускаем все клавиши
pyautogui.keyUp('w')
pyautogui.keyUp('a')
pyautogui.keyUp('s')
pyautogui.keyUp('d')
# Функция для обработки нажатия клавиши F4
def toggle_script():
global script_enabled
script_enabled = not script_enabled
print(f"Скрипт {'включен' if script_enabled else 'выключен'}")
# Основной цикл программы
while True:
if script_enabled:
gta_window = get_gta_window()
if gta_window:
activate_gta_window(gta_window)
frame = capture_screen()
marker_x, marker_y = detect_marker(frame)
control_character(marker_x, marker_y)
else:
print("Окно GTA 5 не найдено.")
# Проверяем нажатие клавиши F4 и переключаем состояние скрипта
if keyboard.is_pressed('f4'):
toggle_script()
# Ждем, пока клавиша F4 будет отпущена, чтобы избежать повторных переключений
while keyboard.is_pressed('f4'):
pass```