Python 使用win32api检查是否在后台按了键

Python 使用win32api检查是否在后台按了键,python,winapi,keypress,Python,Winapi,Keypress,我正在尝试制作一个简单的Python脚本,从工作站上的网络摄像头捕获图像。 我正在做一个“杀死开关”,检查按键是否按下,如果按下,程序将不会运行。 我的问题是,我需要检查键是否被按下,但我找不到一种方法来做这件事。 我试过这个: keyState = win32api.GetAsyncKeyState(17) 但它不起作用 从文件中: 如果窗口位于另一个线程或进程中,则返回值为零 目前有键盘焦点 所以这对我没什么帮助。 顺便说一句,我在Windows上。首先,GetAsyncKeyState

我正在尝试制作一个简单的Python脚本,从工作站上的网络摄像头捕获图像。 我正在做一个“杀死开关”,检查按键是否按下,如果按下,程序将不会运行。 我的问题是,我需要检查键是否被按下,但我找不到一种方法来做这件事。 我试过这个:

 keyState = win32api.GetAsyncKeyState(17)
但它不起作用

从文件中:

如果窗口位于另一个线程或进程中,则返回值为零 目前有键盘焦点

所以这对我没什么帮助。
顺便说一句,我在Windows上。

首先,
GetAsyncKeyState()
还需要和(&)0x8000以确保密钥已关闭

返回值

类型:短

如果函数成功,返回值将指定 自上次调用GetAsyncKeyState后被按下,并且 键当前处于向上或向下状态。如果设置了最高有效位,则 键是向下的,如果设置了最低有效位,则键是向下的 在上一次调用GetAsyncKeyState后按下

请注意,返回值是位编码的(不是布尔值)。应清除最低有效位,如:

keyState = win32api.GetAsyncKeyState(17)&0x8000.
而且,在python中有一个没有窗口焦点的简单解决方案。你可以把电话接通

命令行:

> 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

首先,
GetAsyncKeyState()

返回值

类型:短

如果函数成功,返回值将指定 自上次调用GetAsyncKeyState后被按下,并且 键当前处于向上或向下状态。如果设置了最高有效位,则 键是向下的,如果设置了最低有效位,则键是向下的 在上一次调用GetAsyncKeyState后按下

请注意,返回值是位编码的(不是布尔值)。应清除最低有效位,如:

keyState = win32api.GetAsyncKeyState(17)&0x8000.
而且,在python中有一个没有窗口焦点的简单解决方案。你可以把电话接通

命令行:

> 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

“你能解释一下吗?请参阅MSDN上的文档,它在大多数情况下应该可以工作,因为大多数应用程序都没有阻塞挂钩。这与当前文档中的说法不完全相同。”“你能解释一下吗?请参阅MSDN上的文档,它应该在大多数情况下都能工作,因为大多数应用程序都没有阻止钩子。我尝试使用pynput,但问题是我想检查一个键是否已关闭,即使在程序启动之前您按住了该键。(希望你能理解我。)还有你所说的和(&)0x8000是什么意思?你能告诉我正确的方法吗?正如@Anders所说,它实际上在整个系统的范围内工作。那么
GetAsyncKeyState
是如何不起作用的呢。是否返回0?还是仅仅是错误的位值?如果是这样,请采纳我在回答中提出的建议,清除最不重要的部分。或者是代码跟随键关闭事件不起作用?我尝试使用pynput,但问题是我想检查键是否关闭,即使您在程序启动之前按住键。(希望你能理解我。)还有你所说的和(&)0x8000是什么意思?你能告诉我正确的方法吗?正如@Anders所说,它实际上在整个系统的范围内工作。那么
GetAsyncKeyState
是如何不起作用的呢。是否返回0?还是仅仅是错误的位值?如果是这样,请采纳我在回答中提出的建议,清除最不重要的部分。或者是代码跟随键关闭事件不起作用?