Отключение управления полетом, пробелов, панели инструментов и любого другого внешнего процесса
Мне было интересно, можно ли (на короткое время) отключить и повторно включить внешние процессы для приложения, такого как управление полетами, пробелы, 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). Есть ли другой, более простой способ, или я должен изменить дизайн моего приложения, чтобы он не требовал отключения этих вещей? Могу ли я продолжать использовать мой текущий метод с некоторыми изменениями, чтобы он работал (например, отключение различных свойств по умолчанию)?
Заранее спасибо,
Бен
2 ответа
Ознакомьтесь с документацией "Техническое примечание о режиме киоска" и NSApplicationPresentationDisableProcessSwitching
флаг.
"Должен ли я изменить дизайн моего приложения, чтобы оно не требовало отключения?"
Очень вероятно, ответ на это да. Если не по техническим причинам, то по причинам UX.