首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSEvent全局事件后台监控

NSEvent全局事件后台监控
EN

Stack Overflow用户
提问于 2013-07-25 06:27:20
回答 1查看 1.2K关注 0票数 23

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

代码语言:javascript
复制
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)

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

我的问题是:如何让我的应用程序在启动后立即开始接收事件,而不必首先通过单击Dock图标激活?这是NSEvents的某种已知怪癖,还是我在PyObjC中的run循环出了问题?

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

编辑:根据进一步的测试,实际上,我的应用程序在启动后大约10秒就会自发地开始接收通知,无论我是否激活它。这有点烦人,但很好。

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

EN

回答 1

Stack Overflow用户

发布于 2014-04-09 18:25:01

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17845877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档