Python: obtiene la entrada del mouse sin procesar

Aug 30 2020

Quiero usar Python para leer datos sin procesar del mouse (por ejemplo, señal izquierda, señal derecha) independientemente del puntero del mouse. No quiero leer la posición del cursor, quiero leer los datos sin procesar, similar a como lo haría un juego. ¿Cómo puedo hacer eso? No puedo encontrar ninguna biblioteca que lo admita.

Estoy usando Windows.

Editar: Para aclarar, cuando dije "señal izquierda y señal derecha", me refería al movimiento del mouse , no a los clics del mouse. Edición 2: Creo que la terminología es que quiero el "delta del mouse". Así es como la gente lo hizo en autohotkey -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - pero lo quiero en Python.

Edición 3: Debo mencionar que esto es en un juego que restablece constantemente la posición del puntero, por lo que no puedo usar la diferencia en la posición del puntero. Por eso quiero una API de nivel inferior.

Respuestas

1 Pascalco Aug 30 2020 at 20:15

Obtenga la posición del mouse y compare dos eventos. Si el valor del eje x aumenta, el mouse se mueve hacia la derecha, si el valor del eje x disminuye, el mouse se mueve hacia la izquierda:

from pynput.mouse import Listener

last_position = None

def on_move(x, y):
    global last_position
    if last_position:
        if x > last_position:
            print('mouse moved right')
        elif x < last_position:
            print('mouse moved left')
    last_position = x

with Listener(on_move=on_move) as listener:
    listener.join()        
albusSimba Aug 30 2020 at 20:45

Siempre puede comparar constantemente la posición que fácilmente le hubiera dado un delta. Cualquier API de nivel inferior tendrá que codificar un controlador de mouse usted mismo, que es lo que hacen los desarrolladores de juegos para evitar que las personas escriban scripts, que no es para lo que Python hizo.

import pyautogui
import time


while True:
    prev_x, prev_y = pyautogui.position()
    time.sleep(0.3)
    curr_x, curr_y = pyautogui.position()
    if (curr_x - prev_x) > 0:
        print("move right")
    else:
        print("move left")