Python: ottieni l'input del mouse non elaborato

Aug 30 2020

Voglio usare Python per leggere dati grezzi dal mouse (ad es. Segnale sinistro, segnale destro) indipendentemente dal puntatore del mouse. Non voglio leggere la posizione del cursore, voglio leggere i dati grezzi, simile a come farebbe un gioco. Come lo posso fare? Non riesco a trovare nessuna libreria che lo supporti.

Sto usando Windows.

Modifica: per chiarire, quando ho detto "segnale sinistro e segnale destro", intendevo il movimento del mouse , non i clic del mouse, Modifica 2: credo che la terminologia sia che voglio il "delta del mouse". Ecco come le persone lo hanno fatto in autohotkey -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - ma lo voglio in Python.

Modifica 3: dovrei menzionare che questo è in un gioco che reimposta costantemente la posizione del puntatore, quindi non posso usare la differenza nella posizione del puntatore. Ecco perché voglio un'API di livello inferiore.

Risposte

1 Pascalco Aug 30 2020 at 20:15

Ottieni la posizione del mouse e confronta due eventi. Se il valore dell'asse x aumenta, il mouse si sposta a destra, se il valore dell'asse x diminuisce, il mouse si sposta a sinistra:

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

Puoi sempre confrontare costantemente la posizione che ti avrebbe facilmente dato un delta. Qualsiasi API di livello inferiore dovrai codificare tu stesso un driver del mouse, che è ciò che gli sviluppatori di giochi fanno per impedire alle persone di scrivere script, che non è ciò per cui Python ha creato.

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