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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python图片验证码生成代码
Jul 02 Python
深入理解Python中变量赋值的问题
Jan 12 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
python实现梯度下降算法
Mar 24 Python
浅析Python 中几种字符串格式化方法及其比较
Jul 02 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
python 读取修改pcap包的例子
Jul 23 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
如何使用Python调整图像大小
Sep 26 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
Django框架models使用group by详解
2020/03/11 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
SQL数据库笔试题
2016/03/08 面试题
日语专业求职信
2014/07/04 职场文书
六查六看六改心得体会
2014/10/14 职场文书
入党积极分子个人总结
2015/03/02 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android