使用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.