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 27 Python
快速了解python leveldb
Jan 18 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
python实现任意位置文件分割的实例
Dec 14 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Python3.7+tkinter实现查询界面功能
Dec 24 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
Python字符串格式化f-string多种功能实现
May 07 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python基础详解之if循环语句
Apr 24 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 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
AngularJS内置指令
2015/02/04 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
如何提高python 中for循环的效率
2020/04/15 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
项目合作计划书
2014/01/09 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
三严三实对照检查材料
2014/08/25 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2014年科研工作总结
2014/12/03 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android