2009-04-18 66 views
9

我希望在當前應用程序發生更改時收到通知。我看了一下NSWorkspace。它只會在您的應用程序激活或失去活動時發送通知。 我想了解每個應用程序。我如何在可可中做到這一點?在Cocoa中當前應用程序發生更改時收到通知

+2

這是不可能得到這個信息fr可可。您必須使用碳事件管理器來獲取有關您自己以外的進程何時激活的通知。 – 2009-04-18 06:14:11

回答

12

謝謝賈森。 kEventAppFrontSwitched在碳事件管理器是一個神奇的詞

- (void) setupAppFrontSwitchedHandler 
{ 
    EventTypeSpec spec = { kEventClassApplication, kEventAppFrontSwitched }; 
    OSStatus err = InstallApplicationEventHandler(NewEventHandlerUPP(AppFrontSwitchedHandler), 1, &spec, (void*)self, NULL); 

    if (err) 
     NSLog(@"Could not install event handler"); 
} 

- (void) appFrontSwitched { 
    NSLog(@"%@", [[NSWorkspace sharedWorkspace] activeApplication]); 
} 

而且處理

static OSStatus AppFrontSwitchedHandler(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData) 
{ 
    [(id)inUserData appFrontSwitched]; 
    return 0; 
} 
+0

是的,我做了一個實際發佈通知的人的小例子,但我找不到它。你給出了一個很好的總結,你應該接受這個答案:) – 2009-04-18 07:16:15

+0

備註:要使用它成功構建應用程序,必須將Carbon和Core Services框架添加到構建中,幷包含包含處理程序的實現文件中。 見http://stackoverflow.com/questions/801976/mixing-c-functions-in-an-objective-c-class/有關如何使用Objective-C的 – Christoph 2009-08-06 17:40:33

21

如果你的目標10.6或更高版本有此通知:

// NSWorkspaceDidActivateApplicationNotification 
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(foremostAppActivated:) name:NSWorkspaceDidActivateApplicationNotification object:nil]; 

蘋果文檔:http://developer.apple.com/library/mac/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html#//apple_ref/doc/uid/20000391-SW97

相關問題