使用pyHook可以实现检测键盘的每个按键,并区分左右Ctrl、shift、win等,以及区分主键盘数字和小键盘数字等。
本来很简单的东西,网上很多文章一堆东西甩在哪,很难看懂,让人感觉有多难。 其实就这么简单的几行就可以获取到键盘按键是按得哪一个。
一、安装API
1.pyHook安装
pyHook 库的话需要自己来下载。
选择适合的本机环境的版本进行下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook
pip install pyHook-1.5.1-cp35-cp35m-win_amd64.whl
2、pywin32安装
cmd 直接
pip install pywin32
就可以安装了。
二、python代码
import pyHook
import pythoncom
# 监听到鼠标事件调用
def onMouseEvent(event):
if (event.MessageName != "mouse move"): # 因为鼠标一动就会有很多mouse move,所以把这个过滤下
print(event.MessageName)
return True # 为True才会正常调用,如果为False的话,此次事件被拦截
# 监听到键盘事件调用
def onKeyboardEvent(event):
print(event.Key) # 返回按下的键
return True
def main():
# 创建管理器
hm = pyHook.HookManager()
# 监听键盘
hm.KeyDown = onKeyboardEvent
hm.HookKeyboard()
# 监听鼠标
# hm.MouseAll = onMouseEvent
# hm.HookMouse()
# 循环阻塞监听
pythoncom.PumpMessages()
#pythoncom.PumpWaitingMessages() #单次监听,配合while循环,可以方便控制停止
# 检查是否需要终止线程
#if not keyboard_monitor_running:
#break
if __name__ == "__main__":
main()
效果如下(按下Fn显示None):
三、应用
因为做了个试轴器,想记录一下每个按键对应的轴体是啥,所以写了个程序,按下一个按键,可以输出该按键所对应的轴体,其中轴体信息可以在配置文件里自定义。
程序链接可以记录键盘轴体的试轴器程序-Python文档类资源-优快云下载
四、更新
python3.7+windows环境的报错:
TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'
该问题具体表现在当你focus的那个进程的窗口title带中文, 就会出现上面那个错误, 如果都是英文或者其他ascii字符则不会;
查了些资料了解到是PyHook在Python3的windows下的一个bug。
解决办法:
- 1. 换Linux系统;
- 2. 换为Python2, 这个没试过, 据说是可以;
- 3. 不使用KeyboardEvent, 键盘的监听用PyQt或者PySide2来代替解决, 但是好像只能监控QT UI主窗体;
- 4. 卸载掉PyHook, 安装PyHook-py3k, 完美解决, 具体如下:
- (1) pip uninstall pyhook卸载掉原来的PyHook;
- (2)pip install PyHook3
- 报错
- 报错
这是在提示swig.exe没有被安装。
SWIG(http://www.swig.org/)指的是简单包安装器和接口生成器( simple wrapper and interface generator ),是一个适用于多种语言的工具。一方面,它让你能够使用C或C++编写扩展代码;另一方面,它自动包装这些代码,让你能够在Tcl、Python、Perl、Ruby和Java等高级语言中使用它们。
可以在这里下载:https://sourceforge.net/projects/swig/
下载有点慢,多试几次。 解压缩swigwin-.zip,将其路径设置到path环境变量中,重新打开cmd安装。
继续执行,没有报swig的错误,但还继续报错:
swigging cpyHook.i to cpyHook_wrap.c
D:\Program Files\swigwin-4.1.1\swig.exe -python -o cpyHook_wrap.c cpyHook.i
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
----------------------------------------
ERROR: Command errored out with exit status 1:
是当前安装环境中缺少完整的C++编译环境,因此安装失败。
需要安装: Microsoft Visual C++ Build Tools 2015 ,下载这个链接:http://go.microsoft.com/fwlink/?LinkId=691126 一路默认安装。但该安装包为在线安装包,安装过程需要连接网络下载完整安装包,在没有网络连接的环境下无法使用。最近连了网也下不下来了,所以发一个离线版的供大家下载安装: https://download.youkuaiyun.com/download/weixin_43002202/88583873
程序不再报错,安装成功。
- (3)将pyHook改为PyHook3
import PyHook3 as pyHook
键盘监听程序完美运行。