python中使用pyhook实现键盘监控的例子


Posted in Python onJuly 18, 2014

pyhook下载:http://sourceforge.net/projects/pyhook/files/pyhook/1.5.1/

pyhookAPI手册:http://pyhook.sourceforge.net/doc_1.5.0/

以上网站上提供了几个使用的例子,另外安装pyhooks后,也会有一个例子的文件。于是拿来学习了一下,第一次运行时,提示没有pythoncom模块,就安装了pywin32,安装后,可以正常运行,但是会导致机器发卡,特别是中断程序运行后,鼠标会出现一段时间的自由晃动,找了半天原因,感觉主要是事件频率过高,程序会经常卡在pythoncom.PumpMessages()。

网上搜索了半天,看到有一帖子说是pythoncom.PumpMessages(n),n表示延迟时间,于是试着改了下,发现有一定效果,但不明显,后来想是不是因为没有终止程序,才会导致一直很卡呢,于是添加终止程序语句win32api.PostQuitMessage()。结果还算满意。

# -*- coding: cp936 -*-
import pythoncom 
import pyHook 
import time
import win32api
t=''
asciistr=''
keystr=''
def onKeyboardEvent(event):  
  global t,asciistr,keystr
  filename='d://test.txt'
  wrfile=open(filename,'ab')
  "处理键盘事件"
  if t==str(event.WindowName):
    asciistr=asciistr+chr(event.Ascii)
    keystr=keystr+str(event.Key)
    
  else:
    t=str(event.WindowName)
    if asciistr=='' and keystr=='':
      wrfile.writelines("\nWindow:%s\n" % str(event.Window))
      wrfile.writelines("WindowName:%s\n" % str(event.WindowName)) #写入当前窗体名
      wrfile.writelines("MessageName:%s\n" % str(event.MessageName))
      wrfile.writelines("Message:%d\n" % event.Message)
      wrfile.writelines("Time:%s\n" % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
    else:
      wrfile.writelines("Ascii_char:%s\n" %asciistr)
      wrfile.writelines("Key_char:%s\n" %keystr)
      wrfile.writelines("\nWindow:%s\n" % str(event.Window))
      wrfile.writelines("WindowName:%s\n" % str(event.WindowName)) #写入当前窗体名
      wrfile.writelines("Time:%s\n" % time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
    
    asciistr=chr(event.Ascii)
    keystr=str(event.Key)
  if str(event.Key)=='F12': #按下F12后终止
    wrfile.writelines("Ascii_char:%s\n" %asciistr)
    wrfile.writelines("Key_char:%s\n" %keystr)
    wrfile.close()  
    win32api.PostQuitMessage()
    
  return True
  
  

if __name__ == "__main__":

  #创建hook句柄 
  hm = pyHook.HookManager() 

  #监控键盘 
  hm.KeyDown = onKeyboardEvent 
  hm.HookKeyboard() 

  #循环获取消息 
  pythoncom.PumpMessages(10000)
Python 相关文章推荐
Python实现抓取网页并且解析的实例
Sep 20 Python
在类Unix系统上开始Python3编程入门
Aug 20 Python
Python中scatter函数参数及用法详解
Nov 08 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 Python
微信跳一跳python代码实现
Jan 05 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
django框架防止XSS注入的方法分析
Jun 21 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 #Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 #Python
python采集博客中上传的QQ截图文件
Jul 18 #Python
Python下singleton模式的实现方法
Jul 16 #Python
python的迭代器与生成器实例详解
Jul 16 #Python
Python的内存泄漏及gc模块的使用分析
Jul 16 #Python
Python的垃圾回收机制深入分析
Jul 16 #Python
You might like
PHP用反撇号执行外部命令
2015/04/14 PHP
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
Python循环语句之break与continue的用法
2015/10/14 Python
Python编写登陆接口的方法
2017/07/10 Python
python中的json总结
2018/10/11 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python 判断奇数偶数的方法
2018/12/20 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
教师年度考核评语
2014/04/28 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
个人更名证明
2015/06/23 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
总结python多进程multiprocessing的相关知识
2021/06/29 Python
Nginx缓存设置案例详解
2021/09/15 Servers