[英]python 3 detect caps lock status
我一直在寻找一种方法来识别 Python 3 中 CAPS LOCK 的状态,我发现唯一适用的是Stack Overflow 中的一篇帖子,由 Abhijit 回答,说明:
您可以使用 ctypes 加载 user32.dll,然后使用 nVirtKey = VK_CAPITAL (0x14) 调用 GetKeyState
def get_capslock_state(): import ctypes hllDll = ctypes.WinDLL ("User32.dll") VK_CAPITAL = 0x14 return hllDll.GetKeyState(VK_CAPITAL)
我已将此应用于我的脚本,但返回的值不是预期的 1/0,而是一个从不重复的长 9 数字序列。 我不确定如何使用此值来返回 1/0、T/F 或任何要测试的真实值。
任何想法,无论是基于 Abhijit 的评论还是其他适用于 Python 3 的方法? 非常感谢您的帮助,因为这让我发疯。
从外观上看,您的值被视为一个完整大小的整数。
hllDll.GetKeyState 从此处看到的 Win32 GetKeyState 函数获取其返回值。
Windows 的返回值是一个 Short。 该函数的返回值为 361693184,如果转换为二进制,则为 10101100011110000000000000000。请注意尾随的 16 个 0 位。 我猜返回值来自一个测试,而你应该得到一个 0,并且因为它试图读取一个完整的 32 位整数,所以前 16 位只是垃圾。
我将首先查看您的代码,看看为什么它可能假设该值是一个 32 位整数。 鸭子打字的乐趣:)
我希望这有帮助! 如果这似乎不是问题,请在调用该函数的位置发布一些代码,以便我们更好地查看。
谢谢,Gimson,这确实有帮助。 我可以通过调用以下值来解决此问题:
def CAPSLOCK_STATE():
import ctypes
hllDll = ctypes.WinDLL ("User32.dll")
VK_CAPITAL = 0x14
return hllDll.GetKeyState(VK_CAPITAL)
CAPSLOCK = CAPSLOCK_STATE()
if ((CAPSLOCK) & 0xffff) != 0:
print("\nWARNING: CAPS LOCK IS ENABLED!\n")
这可以解决问题。
这是我建立在 danjmwalker 答案的基础上的最小工作答案
import ctypes
def is_capslock_on():
return True if ctypes.WinDLL("User32.dll").GetKeyState(0x14) else False
print(is_capslock_on())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.