1

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

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

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

4

1 回答 1

3

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

此代码将在 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
于 2009-07-05T00:04:48.207 回答