Python捕捉和模拟鼠标事件的方法


Posted in Python onJune 03, 2015

本文实例讲述了Python捕捉和模拟鼠标事件的方法。分享给大家供大家参考。具体分析如下:

这个假期玩了不少galgame,不过有些很老的游戏没有自动运行模式,点击鼠标又太伤按键了,于是想把滚动鼠标滚轮映射为点击鼠标。

网上搜了一下,没发现什么现成的软件,而按键精灵又太重量级了,于是考虑干脆自己用Python写个算了。

这里需要把PyHook和PyWin32都装上(建议下exe版,免得安装时各种蛋疼)。

翻了翻教程,发现实现起来很简单:

# -*- coding: utf-8 -*- 
import pythoncom, pyHook  
def OnMouseEvent(event): 
  print 'MessageName:',event.MessageName 
  print 'Message:',event.Message 
  print 'Time:',event.Time 
  print 'Window:',event.Window 
  print 'WindowName:',event.WindowName 
  print 'Position:',event.Position 
  print 'Wheel:',event.Wheel 
  print 'Injected:',event.Injected 
  print '---' 
  # 返回 True 可将事件传给其它处理程序,否则停止传播事件 
  return True 
# 创建钩子管理对象 
hm = pyHook.HookManager() 
# 监听所有鼠标事件 
hm.MouseAll = OnMouseEvent # 等效于hm.SubscribeMouseAll(OnMouseEvent) 
# 开始监听鼠标事件 
hm.HookMouse() 
# 一直监听,直到手动退出程序 
pythoncom.PumpMessages()

这个例子程序捕捉了所有的鼠标事件,实际上我只需要捕捉向下滚动滚轮的事件即可。翻了下文档,对应的是MouseWheel,之后只要判断event.Wheel是否为-1即可。

最后就是触发鼠标点击了,这就需要用到win32api.mouse_event()了,发送一个按下鼠标左键的事件,再发送弹起的事件,就完成一次单击了。

最终代码如下:

# -*- coding: utf-8 -*- 
import pythoncom 
import pyHook 
import time 
import win32api 
import win32con 
def onMouseWheel(event): 
  if event.Wheel == -1: 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0) 
    time.sleep(0.05) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0) 
  return True 
hm = pyHook.HookManager() 
hm.MouseWheel = onMouseWheel 
hm.HookMouse() 
pythoncom.PumpMessages()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
python+Splinter实现12306抢票功能
Sep 25 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 Python
Python过滤序列元素的方法
Jul 31 Python
Python中logger日志模块详解
Aug 04 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
利用Python多线程实现图片下载器
Mar 25 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 #Python
Python fileinput模块使用实例
Jun 03 #Python
以windows service方式运行Python程序的方法
Jun 03 #Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 #Python
python中list常用操作实例详解
Jun 03 #Python
python中argparse模块用法实例详解
Jun 03 #Python
Python中的推导式使用详解
Jun 03 #Python
You might like
php&mysql 日期操作小记
2012/02/27 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php身份证号码检查类实例
2015/06/18 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
新浪中用来显示flash的函数
2007/04/02 Javascript
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
实例说明Python中比较运算符的使用
2015/05/13 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
django 常用orm操作详解
2017/09/13 Python
Python hashlib模块用法实例分析
2018/06/12 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Python列表与元组的异同详解
2019/07/02 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
初级Java程序员面试题
2016/03/03 面试题
情况说明书格式范文
2014/05/06 职场文书
阅兵口号
2014/06/19 职场文书
法学院毕业生求职信
2014/06/25 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js