我想知道是否有可能(在很短的时间内)禁用并重新启用外部进程到应用程序中的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的属性)。是否有另一种更简单的方法,或者我应该修改我的应用程序的设计,以便它不需要关闭这些东西?我可以继续使用我当前的方法对其进行一些修改,以便它可以工作(比如在默认情况下关闭不同的属性)吗?
提前致谢,
本
答案 0 :(得分:2)
检查“Kiosk模式技术说明”文档和NSApplicationPresentationDisableProcessSwitching
标记。
答案 1 :(得分:0)
“我应该修改我的应用程序的设计,以便它不需要关闭这些东西吗?”
很可能,答案是肯定的。如果不是技术,那么出于UX的原因。