/ / Czy można monitorować inną aplikację za pomocą Cocoa na Macu? - cel-c, macos, kakao

Czy można monitorować inną aplikację za pomocą Cocoa na Macu? - cel-c, maca, kakao

Na przykład otrzymaj powiadomienie, że inna aplikacja staje się aktywna na ekranie lub zrezygnuj ze stanu aktywnego.

Odpowiedzi:

7 dla odpowiedzi № 1

Pewnie. W klasie delegata aplikacji możesz użyć NSWorkspace aby otrzymywać powiadomienia, gdy aplikacja stanie się aktywna (NSWorkspaceDidActivateApplicationNotification) lub rezygnuje aktywny (NSWorkspaceDidDeactivateApplicationNotification). Zobacz dokumentację na NSWorkspace po więcej informacji.

W swojej klasie kontrolera zrobiłbyś coś takiego:

- (id)init {
if ((self = [super init])) {
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(appDidActivate:)
name:NSWorkspaceDidActivateApplicationNotification
object:nil];
}
return self;
}

- (void)dealloc {
[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
[super dealloc];
}

- (void)appDidActivate:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSLog(@"userInfo == %@", userInfo);

}

Najważniejsze jest to, że musisz się zarejestrować, aby otrzymywać powiadomienia, jak pokazano na -init. Powtórz kod, aby dodać kolejnego obserwatora dla każdej dodatkowej nazwy powiadomienia, którą chcesz (np NSWorkspaceDidDeactivateApplicationNotification).

Kolejną ważną rzeczą do zapamiętania jest usunięcie siebie jako obserwatora w -dealloc (lub gdzie indziej), aby NSWorkspace nie próbuje powiadomić obiektu kontrolera po jego wydaniu+dealloc"d (i nie będzie już prawidłowy).

W określonym -appDidActivate: metody, zrób wszystko, co musisz, z informacjami o danej aplikacji.


0 dla odpowiedzi nr 2

Jeśli chcesz czegoś prostszego niż rozproszone obiekty, możesz użyć rozproszonych powiadomień zrozproszone centrum powiadomień. Jednak nie są one publikowane, chyba że zbudowałeś aplikację. Do monitorowania uruchamiania lub zamykania aplikacji można użyć NSWorkspace i jego centrum powiadomień (sugerowane przez NSGod)