首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyHook鼠标事件

PyHook鼠标事件
EN

Stack Overflow用户
提问于 2016-03-08 16:43:49
回答 1查看 914关注 0票数 0

我用Python写了一个小程序,当我按下鼠标左键时,它会执行函数"go“。然而,我的意图是只有在我持有LMB时才执行go。如果我释放LMB,它应该取消"go“。最后,当取消或成功执行时,当我再次按LMB时,它应该准备好执行相同的操作。

代码如下:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2016-03-08 17:09:17

您的问题是go()中的所有代码都是连续的。如果它是迭代式,那么您可以检查在循环中触发的事件或bool,然后中止go()。bool/事件可以在SubscribeMouseLeftUp()上触发。在您的情况下,这不能迭代完成。

你也许可以尝试在go()方法中添加一个触发器的检查,虽然它不干净,但它可以完成这项工作,尽管它的效率非常低。

第三,根据钩子和gui在线程中的工作方式,您可以将go()卸载到线程。在MouseDown上踢开该线程,然后在MouseUp上中止/终止它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35862697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档