1

ユーザー プロセス (アプリケーション) のステータスを監視するために、ルート プロセス (デーモン) で Carbon Event Manager を使用しています。しかし、私はkEventAppLaunched ルートプロセス(デーモン)を起動しているユーザープロセス(私のアプリケーション)に対してのみ取得しています。kEventAppLaunchedログインしているすべてのユーザーのユーザー プロセス を取得する方法。

static OSStatus CarbonEventHandler(
                                   EventHandlerCallRef inHandlerCallRef, 
                                   EventRef            inEvent, 
                                   void *              inUserData
                                   )
{
    ProcessSerialNumber psn;
    CFStringRef processName = NULL ;

id lUserData;
if (inUserData) {
    lUserData= (id)inUserData;
}

OSStatus status; 
(void) GetEventParameter(
                         inEvent, 
                         kEventParamProcessID, 
                         typeProcessSerialNumber, 
                         NULL, 
                         sizeof(psn), 
                         NULL, 
                         &psn
                         );
switch ( GetEventKind(inEvent) ) {
    case kEventAppLaunched:

        status =    CopyProcessName(&psn , &processName);
        if (processName != NULL) {

            if([(NSString *)processName isEqualToString:@"myApp"])
            {
                //initialize application


            }

            CFRelease(processName); 
        }

            break;

        default:
            break;
    }
    return noErr;
}
- (void)InstallCarbonEventsForMonitor
{


    static EventHandlerRef sCarbonEventsRef = NULL;
    static const EventTypeSpec kEvents[] = {
        { kEventClassApplication, kEventAppLaunched },
        { kEventClassApplication, kEventAppTerminated }
    };

    if (sCarbonEventsRef == NULL) {
        (void) InstallEventHandler( GetApplicationEventTarget(), (EventHandlerUPP) CarbonEventHandler,
                                   GetEventTypeCount(kEvents),
                                   kEvents,
                                   self,
                                   &sCarbonEventsRef
                                   );

    }

}
4

0 に答える 0