是否可以在OS X上观察来自其他应用程序的事件?

Jak*_*rer 2 cocoa applescript communication

基本上,我需要知道有人在iTunes中播放.我理解如何使用Apple的Scripting Bridge控制iTunes,但我似乎无法让iTunes控制我的应用程序.这可能吗?

谢谢!

Jos*_*ell 7

一般来说,不可能弄清楚其他应用程序正在做什么事件,没有.您也无法找到iTunes中按下播放按钮的时间.即使您要捕捉鼠标按下事件,您也必须以某种方式弄清楚当时iTunes的播放按钮是否在其下面.

但是,在这种情况下,你可以做的是注册iTunes开始播放时发布的通知.Dave DeLong已经解决了这个问题.

// Register for notifications, perhaps in awakeFromNib
NSDistributedNotificationCenter *dnc = [NSDistributedNotificationCenter defaultCenter];
[dnc addObserver:self 
        selector:@selector(iTunesTrackDidChange:) 
            name:@"com.apple.iTunes.playerInfo" 
          object:nil];
Run Code Online (Sandbox Code Playgroud)
- (void)iTunesTrackDidChange:(NSNotification *)note {
    NSLog(@"%@", [note userInfo]);
}
Run Code Online (Sandbox Code Playgroud)

这并没有给你所有你希望的东西; 分布式通知很昂贵,所以iTunes很节俭.当曲目开始播放时,您会收到通知,就是这样; 没有停止,没有音量,跳跃音轨和从停止开始播放之间没有区别.但是,通知确实有很多关于轨道本身的信息:几乎所有iTunes元数据和一些文件信息.

希望这很有用!