使用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中是否按下了取消或添加按钮