Advertisement
egor230

автоподбор патронов

Mar 20th, 2025
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.30 KB | Source Code | 0 0
  1. import subprocess, time, psutil, re, pyautogui
  2. from PIL import Image
  3. from pynput import keyboard, mouse
  4. from threading import Event
  5. def get_process_info():
  6.   process_info = {}
  7.   for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
  8.     try:
  9.       pid = proc.info['pid']
  10.       name = proc.info['name']
  11.       cmdline = proc.info['cmdline']      # Проверка, что cmdline не является None
  12.       if cmdline is None:
  13.         continue      # Проверка, запущен ли процесс через Wine
  14.       exe_path = next((part for part in cmdline if part.endswith('.exe')), None)
  15.       if exe_path:       # Извлечение части пути, начинающейся с /mnt и включающей .exe
  16.        match = re.search(r'/mnt/.*?\.exe', exe_path)
  17.        if match:
  18.         exe_path = match.group(0)      # print(pid)         # print(exe_path)
  19.         process_info[pid]= exe_path
  20.     except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
  21.       continue
  22.   return process_info
  23.  
  24. def replace_path_in_dict(d):
  25.   # Определяем новый префикс
  26.   new_prefix = next(('/'.join(value.split('/')[:4]) + '/' for value in d.values() if value.startswith('/mnt/')), None)
  27.   if new_prefix is None:
  28.     raise ValueError("Не удалось определить новый префикс.")
  29.  
  30.   updated_dict = {}
  31.   for key, value in d.items():
  32.     if value.startswith('/mnt/'):    # Если путь уже начинается с /mnt/, оставляем как есть
  33.       updated_value = value
  34.     else:      # Заменяем X:/ на new_prefix
  35.       updated_value = re.sub(r'^[A-Z]:/', new_prefix, value, count=1)
  36.       # Убираем дублирование /games/games/ или других частей
  37.       parts = updated_value.split('/') # Удаляем повторяющиеся сегменты после new_prefix
  38.       unique_parts = []
  39.       for part in parts:
  40.         if not unique_parts or part != unique_parts[-1]:
  41.           unique_parts.append(part)
  42.       updated_value = '/'.join(unique_parts)
  43.     # Добавляем .exe, если его нет
  44.     if isinstance(updated_value, str) and not updated_value.lower().endswith('.exe'):
  45.       updated_value += '.exe'
  46.     updated_dict[key] = updated_value # Путей обновить значение путей.
  47.  
  48.   return updated_dict
  49. get_user_name = f'''#!/bin/bash
  50. current_user=$(whoami);
  51. echo $current_user
  52. exit;# Завершаем выполнение скрипта
  53. '''
  54. user = subprocess.run(['bash'], input=get_user_name, stdout=subprocess.PIPE, text=True).stdout.strip()# имя пользователя.
  55. get_main_id = '''#!/bin/bash # Получаем идентификатор активного окна
  56.    active_window_id=$(xdotool getactivewindow 2>/dev/null)
  57.    if [ -n "$active_window_id" ]; then
  58.        process_id_active=$(xdotool getwindowpid "$active_window_id" 2>/dev/null)
  59.        echo "$process_id_active"
  60.    else
  61.        echo "0"  # Или любое значение по умолчанию, если нет активного окна
  62.    fi
  63.    exit'''
  64. def get_pid_and_path_window():# Получаем идентификатор активного окна
  65.  try:   # Регулярное выражение для поиска путей к .exe файлам
  66.    pattern = re.compile(r'(/mnt/.*?\.exe)|([A-Z]:/.*?\.exe)', re.IGNORECASE)
  67.    data_dict = {}   # Один проход по всем процессам пользователя
  68.    for proc in psutil.process_iter(['pid', 'username', 'cmdline']):
  69.     if proc.info['username'] == user and proc.info['cmdline']:
  70.      cmdline = ' '.join(proc.info['cmdline']).replace('\\', '/')
  71.      match = pattern.search(cmdline)
  72.      if match:
  73.       file_path = match.group(0)       # Обработка пути: берём часть после .sh, если есть
  74.       file_path = file_path.split('.sh', 1)[-1].strip() if '.sh' in file_path else file_path       # Уточняем путь до /mnt/... (если требуется)
  75.       match_mnt = re.search(r'/mnt/[^ ]+', file_path)
  76.       if match_mnt:
  77.         file_path = match_mnt.group(0)
  78.       data_dict[proc.info['pid']] = file_path
  79.  
  80.    # Обновляем словарь с помощью внешних функций (если они есть)
  81.    data_dict1 = get_process_info()
  82.    data_dict.update(data_dict1)
  83.    updated_dict = replace_path_in_dict(data_dict)
  84.    process_id_active = int(
  85.      subprocess.run(['bash'], input=get_main_id, stdout=subprocess.PIPE, text=True).stdout.strip())
  86.    return updated_dict, process_id_active# Обновленный словарь путей.
  87.  except:
  88.    pass
  89.  
  90. left = 930
  91. top = 600
  92. right = 995
  93. bottom = 665
  94. template_image = "find.png"
  95. while 1:
  96.  try:
  97.   time.sleep(1)#  Путь к шаблону
  98.   data_dict, process_id_active=get_pid_and_path_window()
  99.   if data_dict[process_id_active] =="/mnt/807EB5FA7EB5E954/games/Wolfenstein - The New Order/WolfNewOrder_x64.exe":
  100.     if pyautogui.locateOnScreen(template_image, confidence=0.4, region=(left, top, right, bottom)):  # Проверяем, есть ли изображение на экране
  101.         res='xte "keydown E" sleep 0.23 xte "keyup E"'
  102.         subprocess.run(['bash'], input=res, text=True)
  103.  except Exception as e:
  104.     pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement