使用python检测Windows中的鼠标单击
时间:2020-03-06 15:03:35 来源:igfitidea点击:
无论鼠标位于哪个窗口中,如何检测鼠标单击?
Perferabliy用python编写,但是如果有人可以用任何语言解释它,我也许就能弄清楚。
我在微软的网站上发现了这个:
http://msdn.microsoft.com/zh-CN/library/ms645533(VS.85).aspx
但是我看不到如何检测或者接收列出的通知。
尝试使用pygame的pygame.mouse.get_pos()函数,如下所示:
import pygame pygame.init() while True: print pygame.mouse.get_pos()
这仅返回0,0。
我对pygame不熟悉,是否缺少某些内容?
无论如何,我都希望不需要安装第3方模块的方法。
(而不是pywin32 http://sourceforge.net/projects/pywin32/)
解决方案
Windows的处理方法是处理" WM_LBUTTONDBLCLK"消息。
为此,需要使用CS_DBLCLKS类样式创建窗口类。
恐怕我不知道如何在Python中应用它,但希望它可能会给我们一些提示。
使用Mark Hammond的Python for Windows扩展,可使用python访问Windows MFC(包括GUI编程)。哈蒙德(Hammond)和罗宾逊(Robinson)的书中的O'Reilly书籍摘录显示了如何挂钩鼠标消息,例如:
self.HookMessage(self.OnMouseMove,win32con.WM_MOUSEMOVE)
原始MFC并非易事或者显而易见,但在网上搜索python示例可能会产生一些可用的示例。
检测程序外部鼠标事件的唯一方法是使用SetWindowsHookEx安装Windows挂钩。 pyHook模块封装了具体细节。这是一个示例,它将打印每次鼠标单击的位置:
import pyHook import pythoncom def onclick(event): print event.Position return True hm = pyHook.HookManager() hm.SubscribeMouseAllButtonsDown(onclick) hm.HookMouse() pythoncom.PumpMessages() hm.UnhookMouse()
我们可以检查模块随附的example.py脚本,以获取有关事件参数的更多信息。
在纯Python脚本中使用pyHook可能会比较棘手,因为它需要一个活动的消息泵。在本教程中:
Any application that wishes to receive notifications of global input events must have a Windows message pump. The easiest way to get one of these is to use the PumpMessages method in the Win32 Extensions package for Python. [...] When run, this program just sits idle and waits for Windows events. If you are using a GUI toolkit (e.g. wxPython), this loop is unnecessary since the toolkit provides its own.