我正在编写一个简单的Mac应用程序,旨在后台运行并在用户单击鼠标按钮时执行某些操作。该应用程序使用PyObjC以Python编写。我正在使用addGlobalMonitorForEventsMatchingMask
来监视NSLeftMouseDown
事件:
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
当我在终端中运行此代码时,它可以完美地工作。然而,当我将其打包为独立应用程序(使用py2app)并启动它时,应用程序最初不会接收任何事件。(或者至少,如果确实有,它也不会运行我的处理程序方法中的代码)。只有当我在Dock中点击该应用程序时,它才开始接收事件,并且在返回后,它仍然会继续接收事件。但是,在未被激活之前,它不会接收任何内容。
我的问题是:如何使我的应用程序在启动时立即开始接收事件,而不必先通过单击Dock图标进行激活?这是NSEvents
的一些已知怪癖吗,还是我的PyObjC中的运行循环存在问题?
非常感谢任何帮助或指导!
编辑:经进一步测试,实际上,在启动大约十秒钟后,我的应用程序会自动开始接收通知,无论是否激活它。这有点让人烦恼,但没关系。
但是,如果我在我的 Info.plist
中使用 LSUIElement = true
或 LSBackgroundOnly = true
运行应用程序(我最终想要这样做,因为此应用程序应仅在后台运行且永远不会出现在Dock中),我将永远不会收到通知。所以我还是陷入了困境。