PyHook鼠标事件

时间:2016-03-08 08:43:49

标签: python pyhook pyautogui

我在Python中编写了一个小程序,它执行函数" go"当我按下鼠标左键。然而,我的意图是只在我持有LMB时执行。如果我发布LMB,它应该取消" go"。最后当取消或成功执行时,我应该准备好在我再次按下LMB时也这样做。

以下是代码:

import pyHook
import pythoncom
import pyautogui
from time import sleep
pyautogui.size()

width, height = pyautogui.size()


def go(event):

    sleep(0.099)
    pyautogui.moveRel(4, 19, duration=0.099)
    pyautogui.moveRel(-4, 7, duration=0.099)
    pyautogui.moveRel(-3, 29, duration=0.099)
    pyautogui.moveRel(-1, 31, duration=0.099)
    pyautogui.moveRel(13, 31, duration=0.099)
    pyautogui.moveRel(8, 28, duration=0.099)
    pyautogui.moveRel(13, 21, duration=0.099)
    pyautogui.moveRel(-17, 12, duration=0.099)
    pyautogui.moveRel(-42, -3, duration=0.099)
    pyautogui.moveRel(-21, 2, duration=0.099)
    pyautogui.moveRel(-15, 7, duration=0.099)
    pyautogui.moveRel(12, 11, duration=0.099)
    pyautogui.moveRel(-26, -8, duration=0.099)
    pyautogui.moveRel(-3, 4, duration=0.099)
    pyautogui.moveRel(40, 1, duration=0.099)
    pyautogui.moveRel(19, 7, duration=0.099)
    pyautogui.moveRel(14, 10, duration=0.099)
    pyautogui.moveRel(27, 0, duration=0.099)
    pyautogui.moveRel(33, -10, duration=0.099)
    pyautogui.moveRel(-21, -2, duration=0.099)
    pyautogui.moveRel(7, 3, duration=0.099)
    pyautogui.moveRel(-7, 9, duration=0.099)
    pyautogui.moveRel(-8, 4, duration=0.099)
    pyautogui.moveRel(19, -3, duration=0.099)
    pyautogui.moveRel(5, 6, duration=0.099)
    pyautogui.moveRel(-20, -1, duration=0.099)
    pyautogui.moveRel(-33, -4, duration=0.099)
    pyautogui.moveRel(-45, -21, duration=0.099)
    pyautogui.moveRel(-14, 1, duration=0.099)
    return True



hm = pyHook.HookManager()
hm.SubscribeMouseLeftDown(go)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

1 个答案:

答案 0 :(得分:0)

您的问题是go()中的所有代码都是顺序的。如果它是迭代的,你可以检查一个事件或bool在该循环中被触发并中止go()。可以在SubscribeMouseLeftUp()上触发bool / event。在您的情况下,这不能以迭代方式完成。

你或许可以尝试在你的go()方法中检查触发器是不是很干净,但它可以完成这项工作,无论是效率非常低。

第三,根据hooks和gui在线程中的工作方式,你可以将go()卸载到一个线程中。在MouseDown上关闭该线程并在MouseUp上中止/终止它。