Objective c 禁用任务控制、空间、仪表板和任何其他外部流程

Objective c 禁用任务控制、空间、仪表板和任何其他外部流程,objective-c,terminal,dashboard,spaces,nstask,Objective C,Terminal,Dashboard,Spaces,Nstask,我想知道是否有可能(在短时间内)禁用并重新启用应用程序的外部进程,如任务控制、空间、公开、仪表板等。。。在应用程序中,同时仍允许用户使用我的应用程序 我发现实现这一点的一种方法是使用NSTask使用相应的终端命令禁用进程。例如: - (NSString *)runCommandWithBase:(NSString *)base arguments:(NSArray *)arguments { //Create the task NSTask *task = [[NSTask alloc] ini

我想知道是否有可能(在短时间内)禁用并重新启用应用程序的外部进程,如任务控制、空间、公开、仪表板等。。。在应用程序中,同时仍允许用户使用我的应用程序

我发现实现这一点的一种方法是使用
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];}
以及:

要禁用属性,请执行以下操作:

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

提前感谢,

Ben

检查“信息亭模式技术说明”文档和
NSApplicationPresentationDisableProcessSwitching
标志

“我是否应该修改应用程序的设计,使其不需要关闭这些东西?”


很可能,答案是肯定的。如果不是技术原因,那么是用户体验原因

非常感谢!这真的很有用,也正是我想要的!
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);