禁用任务控制,空间,仪表板和任何其他外部过程

时间:2012-01-20 12:25:53

标签: objective-c terminal dashboard spaces nstask

我想知道是否有可能(在很短的时间内)禁用并重新启用外部进程到应用程序中的Mission Control,Spaces,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);

禁用属性

我试过这个并发现它完全不稳定,因为任务控制(公开)并不总是重新启用 - 即使控制其启用属性的文件说它已启用(〜/ Library / Preferences / com.apple) .dock.plist; mcx-expose-disabled的属性)。是否有另一种更简单的方法,或者我应该修改我的应用程序的设计,以便它不需要关闭这些东西?我可以继续使用我当前的方法对其进行一些修改,以便它可以工作(比如在默认情况下关闭不同的属性)吗?

提前致谢,

2 个答案:

答案 0 :(得分:2)

检查“Kiosk模式技术说明”文档和NSApplicationPresentationDisableProcessSwitching标记。

答案 1 :(得分:0)

  

“我应该修改我的应用程序的设计,以便它不需要关闭这些东西吗?”

很可能,答案是肯定的。如果不是技术,那么出于UX的原因。