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中使用mechanize模块模拟浏览器功能
May 05 Python
python编程实现随机生成多个椭圆实例代码
Jan 03 Python
Python读取mat文件,并保存为pickle格式的方法
Oct 23 Python
Python中作用域的深入讲解
Dec 10 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python3下pygame如何实现显示中文
Jan 11 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
python程序输出无内容的解决方式
Apr 09 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
详解Python模块化编程与装饰器
Jan 16 Python
python 统计代码耗时的几种方法分享
Apr 02 Python
用Python写一个简易版弹球游戏
Apr 13 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
BBS(php & mysql)完整版(五)
2006/10/09 PHP
CI框架中zip类应用示例
2014/06/17 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
python中list常用操作实例详解
2015/06/03 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
幼儿如何来做好自我评价
2013/11/05 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
起诉状范本
2015/05/20 职场文书
python glom模块的使用简介
2021/04/13 Python
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL