Отключение управления полетом, пробелов, панели инструментов и любого другого внешнего процесса

Мне было интересно, можно ли (на короткое время) отключить и повторно включить внешние процессы для приложения, такого как управление полетами, пробелы, 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.

Другие вопросы по тегам