Python - получить необработанный ввод с мыши

Aug 30 2020

Я хочу использовать Python для чтения необработанных данных с мыши (например, левый сигнал, правый сигнал) независимо от указателя мыши. Я не хочу читать позицию курсора, я хочу читать необработанные данные, как в игре. Как я могу это сделать? Я не могу найти библиотеки, которые его поддерживают.

Я использую винду.

Изменить: чтобы уточнить, когда я сказал «левый сигнал и правый сигнал», я имел в виду движение мыши , а не щелчки мышью. Редактировать 2: я считаю, что терминология заключается в том, что мне нужна «дельта мыши». Вот как люди это делали в autohotkey -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - но я хочу это на Python.

Изменить 3: я должен упомянуть, что это в игре, которая постоянно сбрасывает положение указателя, поэтому я не могу использовать разницу в положении указателя. Вот почему мне нужен API более низкого уровня.

Ответы

1 Pascalco Aug 30 2020 at 20:15

Получите положение мыши и сравните два события. Если значение оси x увеличивается, мышь перемещается вправо, если значение оси x уменьшается, мышь перемещается влево:

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

Вы всегда можете постоянно сравнивать позицию, которая легко дала бы вам дельту. Любой API нижнего уровня вам придется самостоятельно написать код драйвера мыши, что и делают разработчики игр, чтобы люди не писали сценарии, а 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")