Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows wxPython-捕捉鼠标&;没有窗口焦点的键盘事件_Windows_Keyboard_Wxpython_Mouse_Message Queue - Fatal编程技术网

Windows wxPython-捕捉鼠标&;没有窗口焦点的键盘事件

Windows wxPython-捕捉鼠标&;没有窗口焦点的键盘事件,windows,keyboard,wxpython,mouse,message-queue,Windows,Keyboard,Wxpython,Mouse,Message Queue,我正试图用wxPython编写一个时间管理工具,理想情况下,它不会让人感到突兀,也不会太碍事。到目前为止,该应用程序可以正常使用,并在使用期间最小化到系统托盘 然而,我注意到,一旦帧不对焦,就像它被“图标化”时一样,通常在帧/应用对焦时工作的鼠标和键盘陷阱不再工作 我知道我可以编写一个C++程序来创建一个消息队列钩住并捕获OS级别的所有鼠标和键盘事件,但我不想卷起袖子。毕竟,我之所以要在wxPython中编写UI,首先是为了避免把手弄脏:)你真的需要鼠标和键盘事件,还是只知道用户是否空闲就足够了

我正试图用wxPython编写一个时间管理工具,理想情况下,它不会让人感到突兀,也不会太碍事。到目前为止,该应用程序可以正常使用,并在使用期间最小化到系统托盘

然而,我注意到,一旦帧不对焦,就像它被“图标化”时一样,通常在帧/应用对焦时工作的鼠标和键盘陷阱不再工作


<>我知道我可以编写一个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应用程序中,但这是不同的。