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

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

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Ознакомьтесь с документацией «Техническое примечание о режиме киоска» и флагом NSApplicationPresentationDisableProcessSwitching.

0 голосов
/ 20 января 2012

«Должен ли я изменить дизайн моего приложения, чтобы он не требовал отключения этих вещей?»

Очень вероятно, что ответ на этот вопрос - да.Если не по техническим причинам, то по причинам UX.

...