【问题标题】:wxPython - Trapping Mouse & Keyboard Events without window FocuswxPython - 在没有窗口焦点的情况下捕获鼠标和键盘事件
【发布时间】:2010-11-08 03:56:56
【问题描述】:

我正在尝试使用 wxPython 编写一个时间管理工具,该工具在理想情况下是不引人注目的并且非常不碍事。到目前为止,该应用程序可以正常使用,并在其使用期间最小化到系统托盘。

但是,我注意到一旦框架不在焦点上,就像它“图标化”时一样,当框架/应用程序处于焦点时通常工作的鼠标和键盘捕获将不再工作。

我知道我可以编写一个 C++ 程序来创建消息队列挂钩并在操作系统级别捕获所有鼠标和键盘事件,但我宁愿不要卷起袖子那么。毕竟试图避免弄脏我的手那个是我首先在 wxPython 中编写 UI 的原因 :)

【问题讨论】:

    标签: windows keyboard wxpython mouse message-queue


    【解决方案1】:

    您真的需要鼠标和键盘事件,还是只知道用户是否空闲就足够了? (您提到了一个时间管理应用程序,所以这似乎是可行的。)

    此代码将在 Windows 上运行,并以秒为单位返回空闲时间。

    from ctypes import Structure, windll, c_uint, sizeof, byref
    
    class LASTINPUTINFO(Structure):
        _fields_ = [
            ('cbSize', c_uint),
            ('dwTime', c_uint),
        ]
    
    def get_idle_duration():
        lastInputInfo = LASTINPUTINFO()
        lastInputInfo.cbSize = sizeof(lastInputInfo)
        windll.user32.GetLastInputInfo(byref(lastInputInfo))
        millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime
        return millis / 1000.0
    

    【讨论】:

    • 圣牛。是的,我想你是对的(faceplant)。有一个关于打破用户的键盘时间和鼠标时间的幻想,但我想这可能是那些真正真正真正事后诸葛亮和不必要的类型的事情之一。谢谢你。
    • 还有 .. 这就是你将 C 和 python 结合起来的方式吗?这么简单吗?
    • ctypes 和 pywin32 提供对 Windows API 的访问。您也可以将自己的 C 代码集成到 Python 应用程序中,但这是不同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多