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

标签 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

最佳答案

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

同时,您自己生成通知,因此如果您确实需要了解该应用程序,只需将其添加进去即可。

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

关于objective-c - 有没有办法识别 NSNotification/NSEvent 来自哪个应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280387/

相关文章:

iphone - 自定义 UIProgressView 样式

ios - UIWebView 中的 Facebook 评论框高度不正确

ios - 设置 navigationController.viewControllers 会导致堆栈困惑

objective-c - 如何设计静态类?

ios - 在 Swift 5 协议(protocol)中使用 @objc

iphone - 选择器添加参数

cocoa - 如何为 NSApp.dockTile 创建绑定(bind)

objective-c - 为什么从用户输入中获取的两个 NSString 最终具有相同的地址?

ios - 听 NSNotifications 的正确方法

ios - 快速通过 NSNotificationCenter 发送和接收消息?