Python - ham fare girdisi alın

Aug 30 2020

Fare imlecinden bağımsız olarak fareden ham verileri (örneğin sol sinyal, sağ sinyal) okumak için Python kullanmak istiyorum . İmlecin konumunu okumak istemiyorum, bir oyunun nasıl yapacağına benzer şekilde ham verileri okumak istiyorum. Bunu nasıl yapabilirim? Onu destekleyen herhangi bir kitaplık bulamıyorum.

Windows kullanıyorum.

Düzenleme: Açıklığa kavuşturmak için, "sol sinyal ve sağ sinyal" dediğimde , fare tıklamalarını değil, fare hareketini kastetmiştim , Düzenleme 2: Terminolojinin "fare deltası" olmasını istediğime inanıyorum. İnsanlar autohotkey'de bunu böyle yaptı -https://www.autohotkey.com/boards/viewtopic.php?t=10159 - ama Python'da istiyorum.

Düzenleme 3: Bunun işaretçi konumunu sürekli sıfırlayan bir oyunda olduğunu belirtmeliyim, bu yüzden işaretçi konumundaki farkı kullanamıyorum. Bu yüzden daha düşük seviyeli bir API istiyorum.

Yanıtlar

1 Pascalco Aug 30 2020 at 20:15

Fare konumunu alın ve iki olayı karşılaştırın. X ekseni değeri artarsa, fare sağa hareket eder, x ekseni değeri azalırsa fare sola hareket eder:

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

Size kolayca bir delta verebilecek konumu her zaman sürekli olarak karşılaştırabilirsiniz. Daha düşük seviyeli herhangi bir API, bir fare sürücüsünü kendiniz kodlamanız gerekir; bu, oyun geliştiricilerinin insanların komut dosyası yazmasını önlemek için yaptığı şeydir, ki python bunun için yapılmamıştır.

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