0

我已经开始收听全球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我需要的信息。

4

1 回答 1

1

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

同时,您自己生成通知,所以如果您确实需要了解应用程序,您可以添加它。

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

于 2012-11-08T02:25:34.330 回答