ユーザー プロセス (アプリケーション) のステータスを監視するために、ルート プロセス (デーモン) で 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
);
}
}