使用python ctypes检测shiftkey按下

2024-05-23 21:16:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检测在执行python脚本期间是否按住CTRL | SHIFT | ALT来改变其行为。所以对于ex,如果我在按住SHIFT的情况下运行一个脚本,我希望一个GUI弹出,而不是命令行。。。等。。。在

因为msvcrt.kbhit我做了一些挖掘,发现这个solution似乎很有前途。我在它的热键列表中添加了SHIFT作为测试。不幸的是,如果你在dos shell中尝试下面的代码,你会发现它正确地检测到ESC和NUMLOCK键的按下,但是它不能捕捉到SHIFT键的按下,我不明白为什么会这样。在

任何洞察力都将不胜感激。在

import ctypes, ctypes.wintypes
import win32con

# Register hotkeys
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_ESCAPE)
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_NUMLOCK)
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_LSHIFT)
ctypes.windll.user32.RegisterHotKey(None, 1, 0, win32con.VK_RSHIFT)

# Loop until one of the hotkeys are pressed
try:
    msg = ctypes.wintypes.MSG()
    while ctypes.windll.user32.GetMessageA(ctypes.byref(msg), None, 0, 0) != 0:
        if msg.message == win32con.WM_HOTKEY:
            print("KEY PRESSED!")

        ctypes.windll.user32.TranslateMessage(ctypes.byref(msg))
        ctypes.windll.user32.DispatchMessageA(ctypes.byref(msg))

# Cleanup
finally:
    ctypes.windll.user32.UnregisterHotKey(None, 1)

Tags: import脚本noneshiftmsgctypesvkwin32con