Python - obtenir l'entrée brute de la souris

Aug 30 2020

Je veux utiliser Python pour lire les données brutes de la souris (par exemple, signal gauche, signal droit) indépendamment du pointeur de la souris. Je ne veux pas lire la position du curseur, je veux lire les données brutes, comme le ferait un jeu. Comment puis je faire ça? Je ne trouve aucune bibliothèque qui le prend en charge.

J'utilise Windows.

Edit: Pour clarifier, quand j'ai dit "signal gauche et signal droit", je voulais dire le mouvement de la souris , pas les clics de souris, Edit 2: Je crois que la terminologie est que je veux le "delta de la souris". Voici comment les gens l'ont fait en autohotkey -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - mais je le veux en Python.

Edit 3: Je dois mentionner que c'est dans un jeu qui réinitialise constamment la position du pointeur, donc je ne peux pas utiliser la différence de position du pointeur. C'est pourquoi je veux une API de niveau inférieur.

Réponses

1 Pascalco Aug 30 2020 at 20:15

Obtenez la position de la souris et comparez deux événements. Si la valeur de l'axe x augmente, la souris s'est déplacée vers la droite, si la valeur de l'axe x diminue, la souris s'est déplacée vers la gauche:

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

Vous pouvez toujours comparer constamment la position qui vous aurait facilement donné un delta. Pour toute API de niveau inférieur, vous devrez coder vous-même un pilote de souris, ce que font les développeurs de jeux pour empêcher les gens de créer des scripts, ce qui n'est pas le but de python.

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")