4

iTunes用のプラグインのようなものを開発しています。

多くのユーザーから、iTunes を起動するときにプラグインを起動したいというリクエストがありましたが、これは当然のことです。しかし、これを行う方法がわかりません。

おそらく唯一の方法であるヘルパーアプリについて考えました。ただ気になるのは、通知の受け取り方です。もちろん、iTunes が実行されているかどうかを一貫して確認することはできましたが、それが正しい方法であるかどうかはわかりません。

そのプロセスのオブザーバーとして自分のアプリを追加したいと思います。それは可能ですか?

そうでない場合、アクティビティモニターはどのようにそれを行いますか?


解決

ダイジャンに感謝!私はそれを次のように動作させました:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                           selector:@selector(iTunesLaunched:)
                                                               name:NSWorkspaceDidLaunchApplicationNotification
                                                             object:nil];

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                           selector:@selector(iTunesTerminated:)
                                                               name:NSWorkspaceDidTerminateApplicationNotification
                                                             object:nil];
}

-(void) iTunesLaunched:(NSNotification *)notification {
    NSRunningApplication *runApp = [[notification userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
    if ([runApp.bundleIdentifier isEqualToString:@"com.apple.iTunes"])
        NSLog(@"start");

}

-(void) iTunesTerminated:(NSNotification *)notification {
    NSRunningApplication *runApp = [[notification userInfo] valueForKey:@"NSWorkspaceApplicationKey"];
    if ([runApp.bundleIdentifier isEqualToString:@"com.apple.iTunes"])
        NSLog(@"terminate");

}
4

1 に答える 1

5

NSWorkspace 通知の登録: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/Reference/Reference.html
NSWorkspaceDidLaunchApplicationNotification
NSWorkspaceDidTerminateApplicationNotification

を参照してください。


runningApplications プロパティを KVO する可能性もあります。
ところで、cocotech には、まさにそれを行う素晴らしい NTRunningAppManager クラスがあります。

于 2012-12-23T11:22:08.893 に答える