Python - pobierz surowe dane wejściowe myszy

Aug 30 2020

Chcę używać Pythona do odczytywania surowych danych z myszy (np. Lewy sygnał, prawy sygnał) niezależnie od wskaźnika myszy. Nie chcę czytać pozycji kursora, chcę czytać surowe dane, podobnie jak gra. Jak mogę to zrobić? Nie mogę znaleźć żadnych bibliotek, które to obsługują.

Używam systemu Windows.

Edycja: Aby wyjaśnić, kiedy powiedziałem „lewy sygnał i prawy sygnał”, miałem na myśli ruch myszą , a nie kliknięcia myszą. Edycja 2: Myślę, że terminologia jest taka, że ​​chcę „delty myszy”. Oto jak ludzie robili to w autohotkey -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - ale chcę to w Pythonie.

Edycja 3: Powinienem wspomnieć, że jest to gra, która nieustannie resetuje pozycję wskaźnika, więc nie mogę użyć różnicy w pozycji wskaźnika. Dlatego chcę API niższego poziomu.

Odpowiedzi

1 Pascalco Aug 30 2020 at 20:15

Uzyskaj pozycję myszy i porównaj dwa zdarzenia. Jeśli wartość na osi X wzrośnie, mysz przesunęła się w prawo, jeśli wartość na osi X spadnie, mysz przesunęła się w lewo:

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

Zawsze możesz stale porównywać pozycję, co z łatwością dałoby ci deltę. Każde API niższego poziomu, które będziesz musiał sam zakodować sterownik myszy, robią programiści gier, aby uniemożliwić ludziom pisanie skryptów, co nie jest tym, do czego służy 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")