Sunday, May 25, 2025

AnyDesk like tool2, mouse x y click

 


trenutna verzija koda ne klikće na koordinatu x, y koju odredi server, već:

  • Server prati poziciju svog lokalnog miša, i kada korisnik pritisne c (za „click”), pošalje komandu za klik klijentu,

  • Ali klijent klikće tamo gde se već nalazi njegov miš, jer nema koordinata u komandi {"action": "click"}.


✅ Rešenje: Dodavanje koordinata u komandu za klik

Da bi server kliknuo tačno na poziciji koju je odabrao (npr. klikom miša na prikazani ekran), moramo:

  1. Izračunati koordinatu klika u prikazanoj slici (npr. kada klikneš u OpenCV prozoru),

  2. Mapirati tu koordinatu na originalnu rezoluciju ekrana klijenta,

  3. Poslati tu poziciju klijentu zajedno sa komandom za klik.


🔁 Ažuriran deo server.py (klik sa koordinatama)

Zamenjujemo deo gde se koristi cv2.imshow i cv2.waitKey, dodajemo klik handler:


def handle_client(conn, addr): print(f"[+] Connected by {addr}") data = b'' payload_size = struct.calcsize(">L") screen_width, screen_height = None, None def mouse_callback(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: if screen_width and screen_height: # Preračunaj koordinatu iz prozora u stvarni ekran h, w, _ = frame.shape real_x = int((x / w) * screen_width) real_y = int((y / h) * screen_height) send_command({"action": "move", "x": real_x, "y": real_y}) send_command({"action": "click"}) def send_command(command): try: conn.sendall(pickle.dumps(command)) except: pass cv2.namedWindow("Remote Screen") cv2.setMouseCallback("Remote Screen", mouse_callback) while True: try: # Primi dužinu slike while len(data) < payload_size: data += conn.recv(4096) packed_msg_size = data[:payload_size] data = data[payload_size:] msg_size = struct.unpack(">L", packed_msg_size)[0] # Primi ceo frame while len(data) < msg_size: data += conn.recv(4096) frame_data = data[:msg_size] data = data[msg_size:] # Prikaži sliku frame = cv2.imdecode(np.frombuffer(frame_data, np.uint8), cv2.IMREAD_COLOR) if frame is not None: if screen_width is None or screen_height is None: screen_height, screen_width = frame.shape[:2] cv2.imshow("Remote Screen", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break except Exception as e: print("Error:", e) break conn.close() cv2.destroyAllWindows()

🔁 Ažuriran deo client.py (klik na zadatu koordinatu)

Zamenjujemo:


elif command["action"] == "click": pyautogui.click()

sa:


elif command["action"] == "click": pyautogui.click() elif command["action"] == "move": pyautogui.moveTo(command["x"], command["y"])

Već postoji u kodu, ali sada redosled poziva sa servera postaje:

  1. move (na određene koordinate)

  2. click (na toj lokaciji)


✅ Rezultat:

Server sada klikće na tačnu tačku na ekranu klijenta, tamo gde klikneš mišem na prikazu slike. Ovo ponašanje je slično kako funkcionišu alati poput TeamViewer-a ili AnyDesk-a.

No comments:

Post a Comment

Excel remoter