“团队玩家和Pyhook 奇怪地交互”

2024-10-02 02:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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启动后启动程序,则每次鼠标单击都会变为两次:

^{pr2}$

这没问题——我可以检测到具有相同时间戳的点击,而忽略第二个。但是,当我用另一个鼠标单击时,模式很奇怪:

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关闭或只有一个鼠标连接,那就是唯一的一个!)在

你知道为什么会发生这种情况吗?我能做些什么来获得正常的鼠标事件?在


Tags: eventmessagetime事件position鼠标leftexe
1条回答
网友
1楼 · 发布于 2024-10-02 02:25:57

多种想法:

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

相关问题 更多 >

    热门问题