使用win32api检查背景上是否按下了键

问题描述 投票:1回答:1

我正在尝试制作一个简单的Python脚本,以便在工作站解锁时从我的网络摄像头捕获图像。我正在制作一个“kill switch”来检查按键是否被按下,如果是,程序将无法运行。我的问题是我需要检查按键是否按下,我找不到办法。我试过这个:

 keyState = win32api.GetAsyncKeyState(17)

但它不起作用。

从文档:

如果另一个线程或进程中的窗口当前具有键盘焦点,则返回值为零。

所以它并没有真正帮助我。我正在使用Windows btw。

python winapi keypress
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.