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分割TXT文件成4K的TXT文件
May 23 Python
Python中的rjust()方法使用详解
May 19 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python如何删除文件中重复的字段
Jul 16 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 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 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
js 字符串操作函数
2009/07/25 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
python 利用zmail库发送邮件
2020/09/11 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
聘任书模板
2014/03/29 职场文书
责任书格式范文
2014/07/28 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
先进个人总结范文
2015/02/15 职场文书
安全温馨提示语大全
2015/07/14 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js