Python键盘监听-捕获输入的键值-鼠标监听

使用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文档类资源-CSDN下载

 四、更新

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.csdn.net/download/weixin_43002202/88583873

程序不再报错,安装成功。

  •         (3)将pyHook改为PyHook3
    import PyHook3 as pyHook
    键盘监听程序完美运行。

 

  • 8
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值