gpt4 book ai didi

python - NSEvent 后台全局事件监控

转载 作者:IT老高 更新时间:2023-10-28 20:29:24 28 4
gpt4 key购买 nike

我正在编写一个简单的 Mac 应用程序,旨在在用户单击鼠标按钮时在后台运行并执行某些操作。该应用程序是使用 PyObjC 用 Python 编写的。我正在使用 addGlobalMonitorForEventsMatchingMask 来监视 NSLeftMouseDown 事件:

NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)

此代码在终端中运行时完美运行。但是,当我将它捆绑为独立应用程序(使用 py2app)然后启动它时,该应用程序一开始不会收到任何事件。 (或者至少,如果是这样,它不会运行我的处理程序方法中的代码。)只有当我在 Dock 中单击应用程序时,它才会开始接收事件,然后,即使在它之后,它也会继续接收事件返回后台。但它在激活一次之前不会收到任何东西。

我的问题是:如何让我的应用在启动后立即开始接收事件,而不必先通过单击 Dock 图标来激活它?这是 NSEvents 的一些已知怪癖,还是我在 PyObjC 中的运行循环可能有问题?

非常感谢任何帮助或指导!

编辑:经过进一步测试,事实上,无论我是否激活它,我的应用程序似乎都会在启动后大约十秒内自发地开始接收通知。这有点烦人,但很好。

但是,如果我在 Info.plist 中使用 LSUIElement = trueLSBackgroundOnly = true 运行应用程序(我最终想要要做,因为这个应用程序应该只在后台运行并且永远不会出现在 Dock 中),我从来没有收到通知。所以我还是卡住了。

最佳答案

正如您所说的“只有当我单击 Dock 中的应用程序时,它才会开始接收事件”,这意味着处理程序会在您单击 Dock 中的应用程序后注册。

因此,这取决于您在代码中的哪个位置调用它: NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler) ,那就是注册处理程序。

您应该在 appdidfinishlaunching 函数中注册处理程序。

关于python - NSEvent 后台全局事件监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845877/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com