es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La función “move” y “press” de pyautogui no se ejecuta por alguna razón desconocida.

Estoy construyendo un cliente que recibe comandos de un servidor. (Un programa de tipo “TeamViewer”)
El servidor envía eventos de pulsación de teclas y coordenadas del ratón, y el cliente los ejecuta.
Aunque actualmente la depuración se está ejecutando en el mismo ordenador, espero ver algún movimiento del ratón cuando use pyautogui.move(x,y) o pyautogui.press(char). No se ve ningún movimiento y no se realiza ninguna pulsación de teclado.
La función exe() se ejecuta en un hilo y funciona correctamente (la impresión de las coordenadas funciona bien).

¿Por qué no funcionan pyautogui.move(x,y) o pyautogui.press(char) en este código?


def exe(): while True: if executeQ: command = executeQ.get() commandlist = command.split('\n') char = commandlist[0] x = commandlist[1] #obteniendo el comando y = commandlist[2] try: print(f'Typing - {char}') pyautogui.press(char) except: pass try: print(f'Moving to - {x},{y}') pyautogui.move(x,y) except: print("FUERA DE LÍMITES / MISMA POSICIÓN")
Tags:  , ,

Answer

  1. Avatar for davy.ai

    La posible razón por la cual pyautogui.move(x,y) o pyautogui.press(char) no está funcionando en este código podría ser que la función exe() se esté ejecutando en un hilo separado y las acciones de PyAutoGUI requieren ventanas principales válidas y no pueden realizarse en un hilo de fondo. Esto significa que estas acciones no funcionarán si la ventana en la que se espera un movimiento del mouse o una pulsación de tecla no está en foco.

    Para resolver este problema, puedes intentar agregar una pausa antes de ejecutar la función pyautogui.move(x,y) o pyautogui.press(char) para dar suficiente tiempo a la ventana para que obtenga el foco.

    También puedes intentar agregar pyautogui.FAILSAFE a tu código, que cuando se activa hará que PyAutoGUI aborte instantáneamente si el mouse se mueve a cualquiera de las cuatro esquinas de la pantalla. Esto puede ayudar a prevenir movimientos inesperados del mouse que puedan causar estragos.

    Aquí tienes un ejemplo de cómo puedes modificar tu código para intentar resolver este problema:

    import time
    import pyautogui
    
    pyautogui.FAILSAFE = True
    
    def exe():        
        while True:
            if executeQ:
                command = executeQ.get()               
                commandlist = command.split('\n')
    
                char = commandlist[0]
                x = int(commandlist[1])
                y = int(commandlist[2])
    
                try:
                    print(f'Tecleando - {char}')
                    pyautogui.press(char, interval=0.1)  # agregar una pequeña pausa para permitir que la ventana obtenga el foco
                except:
                    pass
    
                try:
                    print(f'Moviéndose a - {x},{y}')
                    time.sleep(1)  # agregar una pausa para dar suficiente tiempo a la ventana para que obtenga el foco
                    pyautogui.moveTo(x,y, duration=0.1)  # ajustar la duración según sea necesario, el valor predeterminado es 0
                except:
                    print("FUERA DE LÍMITES / MISMA POSICIÓN")
    

    ¡Espero que esto te ayude! Hazme saber si tienes alguna pregunta adicional.

Comments are closed.