gpt4 book ai didi

python - teamplayer 和 pyhook 奇怪地相互作用

转载 作者:行者123 更新时间:2023-11-28 18:55:21 26 4
gpt4 key购买 nike

我正在使用 teamplayer ,它可以让您将更多鼠标连接到您的计算机以同时使用。我还使用 pyHook 来捕获鼠标事件,代码如下:

import pyHook
import pythoncom

def onclick(event):
# called when mouse events are received
print 'MessageName:',event.MessageName
print 'Message:',event.Message
print 'Time:',event.Time
print 'WindowName:',event.WindowName
print 'Position:',event.Position
print '---'
return True

hm = pyHook.HookManager()
hm.MouseLeftDown = onclick
hm.MouseLeftUp = onclick
hm.HookMouse()
pythoncom.PumpMessages()

代码在没有 teamplayer 的情况下工作正常 - 它准确地检测鼠标按钮的按下和向上。如果我在程序运行时启动 teamplayer,那么它会继续正常运行,这次可以准确地检测到两只鼠标的点击。

但是,如果我 teamplayer 启动后启动程序,那么每次鼠标单击都会变成两次:

MessageName: mouse left down
Message: 513
Time: 7231317
WindowName: None
Position: (673, 367)
---
MessageName: mouse left down
Message: 513
Time: 7231317
WindowName: None
Position: (673, 367)
---
MessageName: mouse left up
Message: 514
Time: 7231379
WindowName: None
Position: (673, 367)
---
MessageName: mouse left up
Message: 514
Time: 7231379
WindowName: None
Position: (673, 367)

这没问题 - 我可以检测到具有相同时间戳的点击并忽略第二个点击。然而,当我用不同的鼠标点击时,模式很奇怪:

MessageName: mouse left down
Message: 513
Time: 7305916
WindowName: C:\Python25\python.exe
Position: (569, 306)
---
MessageName: mouse left down
Message: 513
Time: 7305916
WindowName: C:\Python25\python.exe
Position: (722, 365)
---
MessageName: mouse left up
Message: 514
Time: 7309598
WindowName: C:\Python25\python.exe
Position: (722, 365)
---
MessageName: mouse left up
Message: 514
Time: 7309598
WindowName: C:\Python25\python.exe
Position: (722, 365)

也就是说,第一个向下事件使用最后一个向上事件的坐标!问题还在于错误的事件是第一个,因此更难检测到正确的事件(我不能只说“忽略第一个事件”,因为如果 teamplayer 关闭或只连接了一个鼠标,那就是唯一的! )

关于为什么会发生这种情况,以及我可以做些什么来获得正常的鼠标事件,有什么想法吗?

最佳答案

多个想法:

  • 检测来自同一时间戳的重复点击,并忽略其中的第一次。这将需要将处理延迟到一个时间点之后,这确实会使您的代码中的事情稍微复杂化......
  • 您可以更改 pyhook 源代码来处理重复项;在他们的源代码中进行调试可能会让您更深入地了解正在发生的事情。通过简单地查看它,您可以在他们的 HookManagerMouseSwitch 函数中通过排队和刷新消息来完成此操作。一旦你弄清楚那里发生了什么,你就可以包装那个对象,这样你就不必修改 pyhook
  • SetWindowsHookEx API 很可能是生成重复事件的原因;因为 teamplayer 正在用多只鼠标做一些复杂的事情。将此报告给 teamplayer;他们可能在某个时候有兴趣从他们这边修复它

关于python - teamplayer 和 pyhook 奇怪地相互作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3358355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com