Мне было интересно, можно ли (на короткое время) отключить и повторно включить внешние процессы для приложения, такого как управление полетами, пробелы, Expose, Dashboard и т. Д. ... внутри приложения, но при этом разрешить пользователь использовать мое приложение?
Я нашел способ сделать это с помощью NSTask
, чтобы отключить процессы с помощью соответствующей команды терминала. Например:
- (NSString *)runCommandWithBase:(NSString *)base arguments:(NSArray *)arguments {
//Create the task
NSTask *task = [[NSTask alloc] init];
//Setup the task
[task setLaunchPath:base];
[task setArguments:arguments];
[task setStandardInput:[NSPipe pipe]];
[task setStandardOutput:[NSPipe pipe]];
//Set file handle
NSFileHandle *file = [[NSPipe pipe] fileHandleForReading];
//Run the command
[task launch];
//Return
NSData *returnData = [file readDataToEndOfFile];
return [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];}
и
NSString *exposeEnable = [self runCommandWithBase:@"/usr/bin/defaults"
arguments:[NSArray arrayWithObjects:@"write", @"com.apple.dock", @"mcx-expose-disabled", @"-boolean", @"NO", nil]];
NSLog(@"%@", exposeEnable);
NSString *exposeDisable = [self runCommandWithBase:@"/usr/bin/defaults"
arguments:[NSArray arrayWithObjects:@"write", @"com.apple.dock", @"mcx-expose-disabled", @"-boolean", @"YES", nil]];
NSLog(@"%@", exposeDisable);
чтобы отключить свойства
Я попробовал это и обнаружил, что он совершенно нестабилен, так как управление полетом (expose) не всегда будет повторно активировано - даже если файл, который управляет свойством enabled, говорит, что он включен (~ / Library / Preferences / com.apple .dock.plist; свойство mcx-expose-disabled). Есть ли другой, более простой способ, или я должен изменить дизайн моего приложения, чтобы он не требовал отключения этих вещей? Могу ли я продолжать использовать свой текущий метод с некоторыми изменениями, чтобы он работал (например, отключение различных свойств по умолчанию)?
Заранее спасибо,
Ben