我正在尝试制作一个简单的Python脚本以在工作站解锁时从我的网络摄像头捕获图像。 我正在做一个“杀死开关”,检查是否按下了按键,如果按下,程序将无法运行。 我的问题是我需要检查是否按下了键,但找不到解决方法。 我已经尝试过了:
keyState = win32api.GetAsyncKeyState(17)
但这不起作用。
从文档中:
如果另一个线程或进程中的窗口,则返回值为零 当前具有键盘焦点。
所以它并没有真正帮助我。 我在Windows顺便说一句。
答案 0 :(得分:0)
首先,GetAsyncKeyState()
还需要AND(&)0x8000以确保密钥已按下。
返回值
类型:简短
如果函数成功,则返回值指定键是否 自上次调用GetAsyncKeyState以来,按下了该键,以及是否 按键当前是向上还是向下。如果设置了最高有效位,则 键已按下,如果设置了最低有效位,则该键为 在上一次调用GetAsyncKeyState之后按下。
请注意,返回值是位编码的(不是布尔值)。您应该清除最低有效位,例如:
keyState = win32api.GetAsyncKeyState(17)&0x8000.
并且,有一个简单的解决方案没有python中的窗口焦点。您可以通过pynput来获取它。
命令行:
> pip install pynput
Python代码:
from pynput import keyboard
def on_press(key):
try: k = key.char # single-char keys
except: k = key.name # other keys
if key == *(which you want to set):#To Do.
lis = keyboard.Listener(on_press=on_press)
lis.start() # start to listen on a separate thread
lis.join() # no this if main thread is polling self.keys