Python - obter entrada bruta do mouse

Aug 30 2020

Eu quero usar Python para ler dados brutos do mouse (por exemplo, sinal esquerdo, sinal direito) independente do ponteiro do mouse. Não quero ler a posição do cursor, quero ler os dados brutos, da mesma forma que um jogo faria. Como eu posso fazer isso? Não consigo encontrar nenhuma biblioteca que o suporte.

Estou usando o Windows.

Edit: Para esclarecer, quando eu disse "sinal esquerdo e sinal direito", quis dizer movimento do mouse , não cliques do mouse, Editar 2: acredito que a terminologia é que eu quero o "delta do mouse". É assim que as pessoas faziam no autohotkey -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - mas eu quero em Python.

Edit 3: Devo mencionar que este é um jogo que constantemente redefine a posição do ponteiro, então não posso usar a diferença na posição do ponteiro. É por isso que quero uma API de nível inferior.

Respostas

1 Pascalco Aug 30 2020 at 20:15

Obtenha a posição do mouse e compare dois eventos. Se o valor do eixo x aumentar, o mouse será movido para a direita; se o valor do eixo x diminuir, o mouse será movido para a esquerda:

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

Você sempre pode comparar a posição constantemente, o que facilmente teria dado a você um delta. Em qualquer API de nível inferior, você terá que codificar um driver de mouse, que é o que os desenvolvedores de jogos fazem para evitar que as pessoas façam scripts, o que não é para o qual o python foi criado.

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