Windows wxPython-捕捉鼠标&;没有窗口焦点的键盘事件
我正试图用wxPython编写一个时间管理工具,理想情况下,它不会让人感到突兀,也不会太碍事。到目前为止,该应用程序可以正常使用,并在使用期间最小化到系统托盘 然而,我注意到,一旦帧不对焦,就像它被“图标化”时一样,通常在帧/应用对焦时工作的鼠标和键盘陷阱不再工作Windows wxPython-捕捉鼠标&;没有窗口焦点的键盘事件,windows,keyboard,wxpython,mouse,message-queue,Windows,Keyboard,Wxpython,Mouse,Message Queue,我正试图用wxPython编写一个时间管理工具,理想情况下,它不会让人感到突兀,也不会太碍事。到目前为止,该应用程序可以正常使用,并在使用期间最小化到系统托盘 然而,我注意到,一旦帧不对焦,就像它被“图标化”时一样,通常在帧/应用对焦时工作的鼠标和键盘陷阱不再工作 我知道我可以编写一个C++程序来创建一个消息队列钩住并捕获OS级别的所有鼠标和键盘事件,但我不想卷起袖子。毕竟,我之所以要在wxPython中编写UI,首先是为了避免把手弄脏:)你真的需要鼠标和键盘事件,还是只知道用户是否空闲就足够了
<>我知道我可以编写一个C++程序来创建一个消息队列钩住并捕获OS级别的所有鼠标和键盘事件,但我不想卷起袖子。毕竟,我之所以要在wxPython中编写UI,首先是为了避免把手弄脏:)你真的需要鼠标和键盘事件,还是只知道用户是否空闲就足够了?(您提到了一个时间管理应用程序,所以这似乎是可行的。) 此代码将在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
天哪。是的,我想你是对的。有一个关于打破用户的键盘时间和鼠标时间的幻想,但我想这可能是一个真正经过深思熟虑和不必要的事情。谢谢你,还有。。这就是C和python的结合方式吗?有这么简单吗?ctypes和pywin32提供了对Windows API的访问。您也可以将自己的C代码集成到Python应用程序中,但这是不同的。