【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”

03-24 2005阅读 0评论

本篇文章主要讲pynput的键盘监听,以及一个demo“ikun键盘程序”

【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”,【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,安装,第1张
(图片来源网络,侵删)

1. 全局键盘监听

1.1 pynput.keyboard.Listener

这是pynput的子模块keyboard中的一个类,keyboard子模块都是关于键盘操作和监听的

Listener类有两个重要的构造参数,也是我们使用最多的:

Listener(on_press=按下按键时触发的函数,on_release=松开按键时触发的函数)

一般在程序中我们这么使用:

with keyboard.Listener(on_press=按下按键触发的函数,on_release=松开按键触发的函数) as listener:
        listener.join()

按下或者松开按键所触发的函数还有一个参数用来接收按键信息,我一般用key作为参数名

listener.join()是线程阻塞函数,它会让这块代码所在的函数始终监听键盘,所以如果有其他需要阻塞线程或者使用主循环的函数(比如rkinter的mainloop()函数)应该使用多线程

举个例子:

【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”,【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,安装,第2张
(图片来源网络,侵删)
from pynput import keyboard#首先导入模块
def key_press(key):#定义按键按下时触发的函数
    print("按键被按下了")
def key_release(key):
    print("按键被松开了")
with keyboard.Listener(on_press=key_press,on_release=key_release) as listener:
    listener.join()

1.2 获取被按下或者被松开的按键

此时被的触发函数接收的参数key派上了用途。如果是普通按键(就是字母或数字之类),key会有一个叫做char的属性,char本身是一个python字符串,我们可以判断字符串从而得知按下或者松开了哪个键。

举个例子:

from pynput import keyboard#首先导入模块
def key_press(key):#定义按键按下时触发的函数
    print(f"按键{key.char}被按下了")
def key_release(key):
    print(f"按键{key.char}被松开了")
with keyboard.Listener(on_press=key_press,on_release=key_release) as listener:
    listener.join()

但是还有特殊按键的存在呢!比如说ctrl、alt、shift等,如果按下或松开这种特殊按键,传入的key可就不一样了,它没有char属性,所以会报错AttributeError: 'Key' object has no attribute 'char'

于是我们可以用try…except语句,如果程序没遇到AttributeErro,就按普通按键处理,如果遇到了,就是特殊按键,而特殊按键可以在keyboard模块的Key中找到它们的“尊姓大名”,比如keyboard.Key.esc

下面请看例子:

from pynput import keyboard#首先导入模块
def key_press(key):#定义按键按下时触发的函数
    try:
        print(f"按键{key.char}被按下了")
    except AttributeError:
        pass
def key_release(key):
    try:
        print(f"按键{key.char}被松开了")
    except AttributeError:
        pass
with keyboard.Listener(on_press=key_press,on_release=key_release) as listener:
    listener.join()

这样按下特殊按键不会报错了

【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”,【教程&整活】python第三方库pynput全局键盘监听+demo“ikun键盘”,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,安装,第3张
(图片来源网络,侵删)

1.3 组合键监听--特殊转义字符

pynput可以监听很多组合键,并且给触发的函数传入转义字符,例如是表示ctrl+0

注意,使用组合键监听需要keyboard模块的另外一员大将-- Controller。下面看例子:

from pynput.keyboard import Key, Controller,Listener
keyboard = Controller()
def on_press(key):
    print('{0} 被按下'.format(key)) 
def on_release(key):
    print('{0} 被释放'.format(key))
    if key == Key.esc:
        return False
    if str(key) == r"":# ctrl 0
        print('按下ctrl 0,运行测试程序')
# 创建监听
with Listener(on_press=on_press,on_release=on_release) as listener:
    listener.join()

组合键键值表如下(摘自Python中的pynput中组合键的键值_一个小坑货的博客-CSDN博客_pynput 组合键):

keyboard_key_dict = {
    r"'\x01'" : ['ctrl','a'],
    r"'\x02'" : ['ctrl','b'],
    r"'\x03'" : ['ctrl','c'],
    r"'\x04'" : ['ctrl','d'],
    r"'\x05'" : ['ctrl','e'],
    r"'\x06'" : ['ctrl','f'],
    r"'\x07'" : ['ctrl','g'],
    r"'\x08'" : ['ctrl','h'],
    r"'\t'"   : ['ctrl','i'],
    r"'\n'"   : ['ctrl','j'],
    r"'\x0b'" : ['ctrl','k'],
    r"'\x0c'" : ['ctrl','l'],
    r"'\r'"   : ['ctrl','m'],
    r"'\x0e'" : ['ctrl','n'],
    r"'\x0f'" : ['ctrl','o'],
    r"'\x10'" : ['ctrl','p'],
    r"'\x11'" : ['ctrl','q'],
    r"'\x12'" : ['ctrl','r'],
    r"'\x13'" : ['ctrl','s'],
    r"'\x14'" : ['ctrl','t'],
    r"'\x15'" : ['ctrl','u'],
    r"'\x16'" : ['ctrl','v'],
    r"'\x17'" : ['ctrl','w'],
    r"'\x18'" : ['ctrl','x'],
    r"'\x19'" : ['ctrl','y'],
    r"'\x1a'" : ['ctrl','z'],
    r"'\x1f'" : ['ctrl','shift','-'],
    r""  : ['ctrl',';'],
    r""  : ['ctrl','='],
    r""  : ['ctrl','-'],
    r""  : ['ctrl','`'],
    r""  : ['ctrl',r"'"],
    r""   : ['ctrl','0'],
    r""   : ['ctrl','1'],
    r""   : ['ctrl','2'],
    r""   : ['ctrl','3'],
    r""   : ['ctrl','4'],
    r""   : ['ctrl','5'],
    r""   : ['ctrl','6'],
    r""   : ['ctrl','7'],
    r""   : ['ctrl','8'],
    r""   : ['ctrl','9'],
    r"'~'"    : ['shift', '`'],
    r"'!'"    : ['shift', '1'],
    r"'@'"    : ['shift', '2'],
    r"'#'"    : ['shift', '3'],
    r"'$'"    : ['shift', '4'],
    r"'%'"    : ['shift', '5'],
    r"'^'"    : ['shift', '6'],
    r"'*'"    : ['shift', '7'],
    r"'('"    : ['shift', '8'],
    r"')'"    : ['shift', '9'],
    r"'_'"    : ['shift', '-'],
    r"'+'"    : ['shift', '='],
    r"':'"    : ['shift', ';'],
    r"'\"'"   : ['shift', "'"],
    r"'

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,2005人围观)

还没有评论,来说两句吧...

目录[+]