【问题标题】:How to capture Shift + PrintScreen with pyHook?如何使用 pyHook 捕获 Shift + PrintScreen?
【发布时间】:2019-09-02 11:11:50
【问题描述】:

我试图捕获 Shift+PrintScreen,因为 Ctrl+cthis answer 中被捕获。

虽然答案已经过时,但即使我修复了导入,它也不起作用:

import pythoncom
from pyHook import HookManager, GetKeyState, HookConstants

def OnKeyboardEvent(event):
    ctrl_pressed = GetKeyState(HookConstants.VKeyToID('VK_CONTROL') >> 15)
    if ctrl_pressed and HookConstant.IDToName(event.keyId) == 'd':
        print("ctrl plus d was pressed at same time")

    return True

# create a hook manager
hm = HookManager()
# watch for all keyboard events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()

我想捕获 PrintScreen 键并打开我的 Screenshot 应用程序,我能够做到。现在我想捕获 Shift + PrintScreen 并使用其他一些配置打开我的应用程序。如何同时捕获两个密钥?

【问题讨论】:

    标签: python windows pyhook


    【解决方案1】:

    pyhook source code::HookManager.py 列出所有已定义的键常量。在您的情况下,您必须检查 Keystate VK_LSHIFTevent.KeyID VK_SNAPSHOT (PrintScrn 密钥)。这是一个工作示例:

    import pythoncom
    from pyHook import HookManager, GetKeyState, HookConstants
    
    def OnKeyboardEvent(event):
        # in case you want to debug: uncomment next line
        # print repr(event), event.KeyID, HookConstants.IDToName(event.KeyID), event.ScanCode , event.Ascii, event.flags
        if GetKeyState(HookConstants.VKeyToID('VK_LSHIFT')) and event.KeyID == HookConstants.VKeyToID('VK_SNAPSHOT'):
            print("shift + snapshot pressed")
        elif GetKeyState(HookConstants.VKeyToID('VK_CONTROL')) and HookConstants.IDToName(event.KeyID) == 'D':
            print("ctrl + d pressed")
        return True
    
    # create a hook manager
    hm = HookManager()
    # watch for all mouse events
    hm.KeyDown = OnKeyboardEvent
    # set the hook
    hm.HookKeyboard()
    # wait forever
    pythoncom.PumpMessages()
    

    如果您还想将其绑定到右移键,则必须检查 VK_RSHIFT 键状态。

    if (GetKeyState(HookConstants.VKeyToID('VK_LSHIFT')) or GetKeyState(HookConstants.VKeyToID('VK_RSHIFT'))) and event.KeyID == HookConstants.VKeyToID('VK_SNAPSHOT'):
    

    【讨论】:

    • 好吧,我让 Shift+PrintScreen 工作,我无法捕获 Ctrl+D。
    • @SantoshKumar 我已更新代码以正确捕获 ctrl+d。
    • 非常感谢@tintin 的帮助。这个 pyHook 领域没有积极的发展,所以寻找答案非常痛苦。谢谢您的帮助。额外获得 50 声望作为礼物。 ;) 我怎样才能与你联系?
    • 不客气。我会在附近,如果您觉得自己遇到了死胡同,请随时提出问题或联系我。
    猜你喜欢
    • 2015-06-19
    • 2012-05-21
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多