Python - dapatkan input mouse mentah

Aug 30 2020

Saya ingin menggunakan Python untuk membaca data mentah dari mouse (misalnya sinyal kiri, sinyal kanan) tidak tergantung pada penunjuk mouse. Saya tidak ingin membaca posisi kursor, saya ingin membaca data mentah, mirip dengan cara permainan. Bagaimana saya bisa melakukan itu? Saya tidak dapat menemukan perpustakaan yang mendukungnya.

Saya menggunakan Windows.

Sunting: Untuk memperjelas, ketika saya mengatakan "sinyal kiri dan sinyal kanan", yang saya maksud adalah gerakan mouse , bukan klik mouse, Edit 2: Saya yakin terminologinya adalah saya menginginkan "delta mouse". Beginilah cara orang melakukannya di kunci otomatis -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - tapi saya menginginkannya dengan Python.

Sunting 3: Saya harus menyebutkan bahwa ini adalah permainan yang secara konstan mengatur ulang posisi penunjuk, jadi saya tidak dapat menggunakan perbedaan dalam posisi penunjuk. Itulah mengapa saya menginginkan API tingkat yang lebih rendah.

Jawaban

1 Pascalco Aug 30 2020 at 20:15

Dapatkan posisi mouse dan bandingkan dua peristiwa. Jika nilai sumbu x bertambah, mouse digerakkan ke kanan, jika nilai sumbu x berkurang, mouse digerakkan ke kiri:

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

Anda selalu dapat membandingkan posisi secara konstan yang akan dengan mudah memberi Anda delta. Setiap API tingkat yang lebih rendah Anda harus mengkodekan driver mouse sendiri, yang dilakukan oleh pengembang game untuk mencegah orang membuat skrip, yang bukan tujuan pembuatan skrip 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")