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实现linux服务器批量修改密码并生成execl
Apr 22 Python
Python深入学习之装饰器
Aug 31 Python
python将ansible配置转为json格式实例代码
May 15 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
python实现Flappy Bird源码
Dec 24 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
一行代码python实现文件共享服务器
Apr 22 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中json_encode中文编码问题分析
2011/09/13 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
理解JS事件循环
2016/01/07 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
简单说明Python中的装饰器的用法
2015/04/24 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
python os.fork() 循环输出方法
2019/08/08 Python
python对常见数据类型的遍历解析
2019/08/27 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
深圳茁壮笔试题
2015/05/28 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
运动会邀请函范文
2014/02/06 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
团队精神口号
2014/06/06 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python