繁体   English   中英

python 3检测大写锁定状态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM