Python 使用win32api检查是否在后台按了键
我正在尝试制作一个简单的Python脚本,从工作站上的网络摄像头捕获图像。 我正在做一个“杀死开关”,检查按键是否按下,如果按下,程序将不会运行。 我的问题是,我需要检查键是否被按下,但我找不到一种方法来做这件事。 我试过这个:Python 使用win32api检查是否在后台按了键,python,winapi,keypress,Python,Winapi,Keypress,我正在尝试制作一个简单的Python脚本,从工作站上的网络摄像头捕获图像。 我正在做一个“杀死开关”,检查按键是否按下,如果按下,程序将不会运行。 我的问题是,我需要检查键是否被按下,但我找不到一种方法来做这件事。 我试过这个: keyState = win32api.GetAsyncKeyState(17) 但它不起作用 从文件中: 如果窗口位于另一个线程或进程中,则返回值为零 目前有键盘焦点 所以这对我没什么帮助。 顺便说一句,我在Windows上。首先,GetAsyncKeyState
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?还是仅仅是错误的位值?如果是这样,请采纳我在回答中提出的建议,清除最不重要的部分。或者是代码跟随键关闭事件不起作用?