检测Cocoa应用程序中的用户活动(点击,点击,...)

时间:2015-07-30 21:49:12

标签: objective-c macos swift cocoa

对于Mac应用程序,我想检测应用程序中的用户活动,因此我可以定期让Web服务知道用户在端点上仍处于活动状态。

在Cocoa Touch中,我会覆盖sendEvent的{​​{1}},但Cocoa中UIApplication等效的sendEvent不会这样做。

我应该为Mac应用程序使用哪些API来检测用户活动?我可以以某种方式有一个全球响应者连接,从哪里可以发送ping到我的服务?

优选地,我想听取用户可以预期每15-30秒执行一次的动作,即。点击,标签,打字,切换窗口或应用程序。

3 个答案:

答案 0 :(得分:3)

您最有可能想要使用global event monitor创建+[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]。每当类型与传递的掩码匹配的事件(您应该使用NSAnyEventMask)被发送到另一个应用程序时,这将调用您的处理程序。你可以在这里观察,但不能改变,这完全适合你的使用。有一点需要注意:文档说您不会收到关键事件,除非您的应用程序受信任的辅助功能。

对于使用+[NSEvent addLocalMonitorForEventsMatchingMask:handler:]路由到您自己的应用程序的事件,您可以执行类似操作。

答案 1 :(得分:2)

它不是通知,但您可以使用CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType)查询自用户活动以来的时间。

答案 2 :(得分:-1)

这对我有用:

-(void) addMyApplicationEventsMonitor {
    self.localEventsMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskAny handler:^NSEvent * (NSEvent *  event) {
        // do your stuff here
        return event;
    }];
}

-(void)dealloc{
    //remember add this to remove your monitor
    [NSEvent removeMonitor:self.localEventsMonitor];
}

reference here