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 urlopen 使用小示例
Sep 06 Python
python进阶教程之动态类型详解
Aug 30 Python
跟老齐学Python之Python安装
Sep 12 Python
Python基础语法(Python基础知识点)
Feb 28 Python
python中的格式化输出用法总结
Jul 28 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
Python绘制股票移动均线的实例
Aug 24 Python
python多线程实现TCP服务端
Sep 03 Python
python实现飞行棋游戏
Feb 05 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 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页面中文乱码分析
2013/10/29 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
python中global与nonlocal比较
2014/11/21 Python
Python ftp上传文件
2016/02/13 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Python中文编码知识点
2019/02/18 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
技术副厂长岗位职责
2013/12/26 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
导游词范文
2015/02/13 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
2015年度企业工作总结
2015/05/21 职场文书
被委托人身份证明
2015/08/07 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
python之django路由和视图案例教程
2021/07/26 Python
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python