我一直在寻找一种方法来识别Python 3中CAPS LOCK的状态,我发现唯一适用的是a post here in Stack Overflow answered by 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中的其他方法?非常感谢您的帮助,因为这让我疯狂。
答案 0 :(得分:1)
从它的外观来看,您的值被视为一个完整大小的整数。
hllDll.GetKeyState从看到here的Win32 GetKeyState函数中获取其返回值。
Windows的返回值是Short。函数的返回值为361693184,如果转换为二进制,则为10101100011110000000000000000.请注意尾随的16个0位。我猜测返回值来自于你应该得到0的测试,并且因为它试图读取一个完整的32位int,前16位只是垃圾。
我首先看看你的代码,看看它为什么假设值是一个32位整数。鸭子打字的乐趣:)
我希望这有帮助!如果这似乎不是问题,请在调用函数的地方发布一些代码,以便我们更好地了解。
答案 1 :(得分:0)
谢谢,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")
这就是诀窍。