python中使用pyhook实现键盘监控的例子
admin
2023-07-31 02:06:26
0

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)

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...