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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
python连接mysql并提交mysql事务示例
Mar 05 Python
解决uWSGI的编码问题详解
Mar 24 Python
python判断设备是否联网的方法
Jun 29 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
Python如何进行时间处理
Aug 06 Python
python实现图片转换成素描和漫画格式
Aug 19 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
如何用python绘制雷达图
Apr 24 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
JS Timing
2007/04/21 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
JavaScript实用技巧(一)
2010/08/16 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
js实现无缝轮播图特效
2020/05/09 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python-基础-入门 简介
2014/08/09 Python
TF-IDF算法解析与Python实现方法详解
2017/11/16 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
python实现简易内存监控
2018/06/21 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
应届大专毕业生自我鉴定
2014/04/08 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
单位未婚证明范本
2014/11/25 职场文书
通知书大全
2015/04/27 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
golang实现浏览器导出excel文件功能
2022/03/25 Golang