起因是有个朋友说想写一个小工具看看自己每天敲了多少次键盘,当时因为很忙就直接回复用 pyHook。后来没忍住,自己业余时间写了个图形界面的工具,用了几天感觉还可以了,放出一个 exe 下载。

项目在 Microcore/KeyCounter,下载在项目的 release 里,目前只支持 Windows。主要原理就是

  • 用 pyHook 监听键盘按键被按下的事件
  • 创建一个屏幕大小的窗口,背景设置为透明,在上面绘制数字
  • 每次按键事件,更新数字并且重绘窗口上的文字
  • 创建一个托盘图标,通过菜单来重置计数、调整文字透明度和退出

代码写得很简单,基本就是去调用各种 Windows API,不过设置透明度的窗口是用 MFC 做的。

中间还发现三个问题。第一是如果你监听 KeyDown 事件,那么按住一个键一段时间后,这个事件就会不停触发(后来想了一下这是合理的);二是如果你监听 KeyUp 事件,那么基本上可以断定你会遇到 pyHook 的头号 bug,目前还没有修复,而我也不想直接修改它的源码;最后一个就是,我尝试监听鼠标键按下的事件,发现会对鼠标指针的移动速度造成很大影响(我是速度调得比较高并且去掉指针加速的,如果你是老年人速度那么可以尝试搞一搞),就是鼠标移动快一点的话,比如跨屏快速定位,指针酒会变得一卡一卡的。最终我放弃了鼠标键计数,专心做键盘计数。

想要验证签名的话请使用这个公钥 0A662175C3997E84A6FA879499321BCE08B738B8,关于如何验证签名请参考 Making and verifying signatures

最后提一下一个 Simon Brunning 写的一个很有用的 Windows 系统托盘图标类,以及一个实用的量化生活工具(其中包含了记录键盘活动,并能进行历史搜索和统计等操作)selfspy