有没有办法识别NSNotification / NSEvent来自哪个应用程序?

时间:2012-11-08 00:00:43

标签: objective-c cocoa nsnotificationcenter nsnotification nsevent

我已开始收听全球keyDown事件。有没有办法从事件来自哪个应用程序获取信息?

处理程序接收NSNotification实例,NSEvent是其中的一部分。我可以以某种方式从这些对象中提取信息吗?

听力片段:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event){
    NSLog(@"global keyDown %@", event);
    [[NSNotificationCenter defaultCenter] postNotificationName:kKeyPressed
                                                        object:event];

}];

观察:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyEventHandler:)
                                             name:kKeyPressed
                                           object:nil];

更新

不会从任何特定应用程序发送全局关键字。我真正需要的是在事件处理程序中检查当前活动应用程序:

[[NSWorkspace sharedWorkspace] activeApplication]

这会返回NSDictionary我需要的信息。

1 个答案:

答案 0 :(得分:1)

您不是发布分发通知,也不是使用分布式通知中心。这意味着您知道该通知来自当前的应用程序。

与此同时,您自己生成通知,因此,如果您 需要知道该应用程序,您可以将其添加进去。

最后,您嵌入的事件是全局键事件,它们没有关联的应用程序。除特殊情况外,它们不是由任何应用程序生成的,而是由用户在键盘上输入生成的。