init
This commit is contained in:
69
get_coords.py
Normal file
69
get_coords.py
Normal file
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Вспомогательный скрипт для подбора координат для config.json.
|
||||
Запустите его, затем наведите мышь на нужный элемент в окне мессенджера
|
||||
и нажмите клавишу — в консоль выведется позиция мыши.
|
||||
Для координат ОТНОСИТЕЛЬНО окна: сначала активируйте окно мессенджера,
|
||||
запустите скрипт и кликайте по элементам — скрипт покажет и экранные координаты,
|
||||
и координаты относительно активного окна (если доступно).
|
||||
"""
|
||||
|
||||
import sys
|
||||
import time
|
||||
import platform
|
||||
from pathlib import Path
|
||||
|
||||
def get_cursor_pos():
|
||||
import pyautogui
|
||||
return pyautogui.position()
|
||||
|
||||
def get_active_window_rect():
|
||||
"""Позиция активного окна (Windows: через pygetwindow, Linux: wmctrl)."""
|
||||
if platform.system() == "Windows":
|
||||
try:
|
||||
import pygetwindow as gw
|
||||
w = gw.getActiveWindow()
|
||||
if w:
|
||||
return (w.left, w.top, w.width, w.height)
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
try:
|
||||
import subprocess
|
||||
out = subprocess.run(["xdotool", "getactivewindow", "getwindowgeometry"], capture_output=True, text=True, timeout=2)
|
||||
if out.returncode != 0:
|
||||
return None
|
||||
# Parse "Position: 100,200 (screen: 0)\nDimensions: 400x300"
|
||||
pos = dim = None
|
||||
for line in out.stdout.strip().splitlines():
|
||||
if line.startswith("Position:"):
|
||||
part = line.split("(", 1)[0].replace("Position:", "").strip()
|
||||
a, b = part.split(",")
|
||||
pos = (int(a.strip()), int(b.strip()))
|
||||
elif line.startswith("Dimensions:"):
|
||||
part = line.split(":", 1)[1].strip()
|
||||
w, h = part.split("x")
|
||||
dim = (int(w), int(h))
|
||||
if pos and dim:
|
||||
return (pos[0], pos[1], dim[0], dim[1])
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Координаты обновляются в реальном времени. Остановка: Ctrl+C")
|
||||
try:
|
||||
while True:
|
||||
time.sleep(0.2)
|
||||
x, y = get_cursor_pos()
|
||||
rect = get_active_window_rect()
|
||||
if rect:
|
||||
rel_x = x - rect[0]
|
||||
rel_y = y - rect[1]
|
||||
print(f"\rЭкран: ({x}, {y}) | Относительно окна: ({rel_x}, {rel_y}) ", end="", flush=True)
|
||||
else:
|
||||
print(f"\rЭкран: ({x}, {y}) ", end="", flush=True)
|
||||
except KeyboardInterrupt:
|
||||
print("\nГотово.")
|
||||
Reference in New Issue
Block a user