无论鼠标位于哪个窗口,我如何检测鼠标点击?
在python中Perferabliy,但是如果有人可以在任何语言中解释它我可能能够弄明白.
我在microsoft的网站上找到了这个:http: //msdn.microsoft.com/en-us/library/ms645533(VS.85).aspx
但我不知道如何检测或接收列出的通知.
尝试使用pygame的pygame.mouse.get_pos()函数,如下所示:
import pygame pygame.init() while True: print pygame.mouse.get_pos()
这只会返回0,0.我不熟悉pygame,缺少什么?
无论如何,我更喜欢不需要安装第三方模块的方法.(除了pywin32 http://sourceforge.net/projects/pywin32/)
检测程序外部鼠标事件的唯一方法是使用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脚本,以获取有关事件参数的更多信息.
pyHook在纯Python脚本中使用可能很棘手,因为它需要一个活动的消息泵.从教程:
任何希望接收全局输入事件通知的应用程序都必须具有Windows消息泵.获取其中之一的最简单方法是在Win32 Extensions包中使用PumpMessages方法.[...]运行时,此程序处于空闲状态并等待Windows事件.如果您使用的是GUI工具包(例如wxPython),则此循环是不必要的,因为工具包提供了自己的工具包.
我用的是win32api.单击任何窗口时都可以使用它.
# Code to check if left or right mouse buttons were pressed import win32api import time state_left = win32api.GetKeyState(0x01) # Left button down = 0 or 1. Button up = -127 or -128 state_right = win32api.GetKeyState(0x02) # Right button down = 0 or 1. Button up = -127 or -128 while True: a = win32api.GetKeyState(0x01) b = win32api.GetKeyState(0x02) if a != state_left: # Button state changed state_left = a print(a) if a < 0: print('Left Button Pressed') else: print('Left Button Released') if b != state_right: # Button state changed state_right = b print(b) if b < 0: print('Right Button Pressed') else: print('Right Button Released') time.sleep(0.001)