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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用win32api检查背景上是否按下了键相关的知识,希望对你有一定的参考价值。

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

 keyState = win32api.GetAsyncKeyState(17)

但它不起作用。

从文档:

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

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

答案

首先,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

以上是关于使用win32api检查背景上是否按下了键的主要内容,如果未能解决你的问题,请参考以下文章

如何检查PKAddPassesViewController中是否按下了取消或添加按钮

如何使用 GetAsyncKeyState 查看按键被按下了 x 秒

Android,检查是不是按下了返回按钮

在 Swift 中检测按键事件

win32 api - 如何检查远程机器上的用户权限

如何检测是不是在 HTML 页面上的任意位置按下了某个键?