我试图制作一个非常简单的程序,F5当我按下另一个键时按下该键(示例q)。每当我使用常规字符 az 我比较使用
if key.char == 'q':
这工作正常,直到我介绍Key.f5
(或任何其他Key.
)
if key.char == 'q':
keyboard.press(Key.f5)
keyboard.release(Key.f5)
然后我得到这个错误:
if f(*args) is False:
File "C:\Users\lkl\Desktop\combination-1.py", line 17, in on_release
if key.char == 'q':
AttributeError: 'Key' object has no attribute 'char'
我曾尝试重命名key
为key1
和其他名称。我试图创建一个名为keyboard1
和其他名称的控制器。我试图在它自己的函数中隔离以下代码:
keyboard.press(Key.f5)
keyboard.release(Key.f5)
我试图用 Try except 语句来捕捉错误。错误仍然出现。它结束了执行。
我试图key.char
通过简单地将键与字符的 Unicode 和 html 代码进行比较来避免这种情况。按下时不会触发任何操作q
if key == 'U+0071':
问题是,F5
即使我使用,程序也会执行命令,key.char
但 AttributeError 会停止程序。
我能够做到这一点:
if key == Key.shift_l:
keyboard.press(Key.f5)
keyboard.release(Key.f5)
但我需要密钥是一个简单的 az 密钥,因为机器正在通过单独机器上的键盘记录器接收密钥。它只能发送/接收非特殊密钥。例如。数字和字母。
这完全让我的大脑起皱。F5
我在收听时找不到单一的发送方式'q'
。
这是完整的代码:
from pynput.mouse import Listener as ms
from pynput.keyboard import Listener as kb
from pynput.keyboard import Key, Controller
import os
import sys
import subprocess
keyboard = Controller()
def on_press(key):
print('{0} pressed'.format(
key))
def on_release(key):
print('{0} release'.format(
key))
if key.char == 'q':
keyboard.press(Key.f5)
keyboard.release(Key.f5)
if key == "a":
subprocess.call("C:/Users/lkl/Desktop/fastsafelargetest - Copy.vbs", shell=True)
if key == 'z':
subprocess.call("C:/Users/lkl/Desktop/autofill.vbs", shell=True)
if key == Key.esc:
return False
def on_click(x, y, button, pressed):
if pressed:
pass
else:
#subprocess.call("C:/Users/lkl/Desktop/fastsafelargetest - Copy.vbs", shell=True)
print('Released')
def on_scroll(x, y, dx, dy):
print('Scrolled {0}'.format(
(x, y)))
# Collect events until released
with ms(
on_click=on_click,
on_scroll=on_scroll) as listener:
with kb(
on_press=on_press,
on_release=on_release) as listener:
listener.join()