Новичок здесь.Я пытаюсь создать небольшой приемник для запуска приложений, и у меня уже есть это:
// almon.m
#import <Cocoa/Cocoa.h>
#import <stdio.h>
#include <signal.h>
@interface almon: NSObject {}
-(id) init;
-(void) launchedApp: (NSNotification*) notification;
@end
@implementation almon
-(id) init {
NSNotificationCenter * notify
= [[NSWorkspace sharedWorkspace] notificationCenter];
[notify addObserver: self
selector: @selector(launchedApp:)
name: @"NSWorkspaceWillLaunchApplicationNotification"
object: nil
];
fprintf(stderr,"Listening...\n");
[[NSRunLoop currentRunLoop] run];
fprintf(stderr,"Stopping...\n");
return self;
}
-(void) launchedApp: (NSNotification*) notification {
NSDictionary *userInfo = [notification userInfo]; // read full application launch info
NSString* AppPID = [userInfo objectForKey:@"NSApplicationProcessIdentifier"]; // parse for AppPID
int killPID = [AppPID intValue]; // define integer from NSString
kill((killPID), SIGSTOP); // interrupt app launch
NSString* AppPath = [userInfo objectForKey:@"NSApplicationPath"]; // read application path
NSString* AppBundleID = [userInfo objectForKey:@"NSApplicationBundleIdentifier"]; // read BundleID
NSString* AppName = [userInfo objectForKey:@"NSApplicationName"]; // read AppName
NSLog(@":::%@:::%@:::%@:::%@", AppPID, AppPath, AppBundleID, AppName);
}
@end
int main( int argc, char ** argv) {
[[almon alloc] init];
return 0;
}
// build: gcc -Wall almon.m -o almon -lobjc -framework Cocoa
// run: ./almon
Примечание: когда я его создаю, он будет работать нормально, но если вы сделаете это с Xcode 10 на HighСьерра, вы получите ld
предупреждений, которые вы можете игнорировать, однако.
Мой вопрос: Есть ли способ также обнаружить запуск фонового приложения Например, приложение панели меню, такое как Вязкость и т. д.?Apple утверждает, что
система не публикует [NSWorkspaceWillLaunchApplicationNotification] для фоновых приложений или для приложений, которые имеют ключ LSUIElement
в своем файле Info.plist
.Если вы хотите знать, когда все приложения (включая фоновые приложения) запускаются или завершаются, используйте наблюдение значения ключа для отслеживания значения, возвращаемого методом runningApplications
.
Здесь: https://developer.apple.com/documentation/appkit/nsworkspacewilllaunchapplicationnotification?language=objc
Я бы хотя бы попытался добавить поддержку фоновых приложений и т. Д. Для слушателя, но я не знаю, как это сделать.Есть идеи?