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设计模式之单例模式实例
Apr 26 Python
Python深入学习之内存管理
Aug 31 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
python队列Queue的详解
May 10 Python
Django 重写用户模型的实现
Jul 29 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
python怎么判断素数
Jul 01 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 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
一个多文件上传的例子(原创)
2006/10/09 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
PHP 实现链式操作
2021/03/09 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
期中考试反思800字
2014/05/01 职场文书
学校运动会广播稿
2014/10/11 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
python神经网络 使用Keras构建RNN训练
2022/05/04 Python