使用python ctypes检测shift键按下

时间:2014-02-13 22:58:23

标签: python winapi ctypes

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

因为msvcrt.kbhit无法检测到SHIFT键按下我做了一些挖掘并发现这个solution似乎很有希望。我将SHIFT添加到其热键列表作为测试。不幸的是,如果你在dos shell中尝试下面的代码,你会发现它正确检测到ESC和NUMLOCK按键,但它不会抓住SHIFT按键,我无法理解为什么会这样。 / p>

非常感谢任何见解。

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)

1 个答案:

答案 0 :(得分:3)

有一个名为PyHook的包,负责处理与Windows上的输入事件相关的大多数低级细节。值得一看。

链接到键盘钩子文档:

安装人员的链接: