运维开发网

objective-C语言 如何关闭Mac屏幕保护程序?

运维开发网 https://www.qedev.com 2020-05-10 20:12 出处:网络 作者:运维开发网整理
我正在编写一个使用Apple的kiosk模式的应用程序.我想禁用屏幕保护程序,但“ScreenSaverDefaults”类报告自己只是32位.我可以将构建更改为仅32位,但我希望能够支持64位体系结构. 我是否应该使用其他任何框架来禁用屏幕保护程序? 首先,您需要保存当前设置,以便在关闭它之前将其恢复原样: NSTask *readTask = [[NSTask alloc] init]; [r
我正在编写一个使用Apple的kiosk模式的应用程序.我想禁用屏幕保护程序,但“ScreenSaverDefaults”类报告自己只是32位.我可以将构建更改为仅32位,但我希望能够支持64位体系结构.

我是否应该使用其他任何框架来禁用屏幕保护程序?

首先,您需要保存当前设置,以便在关闭它之前将其恢复原样:

NSTask *readTask = [[NSTask alloc] init];
[readTask setLaunchPath:@"/usr/bin/defaults"];

NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"read", @"com.apple.screensaver", @"idleTime", nil];
[readTask setArguments:arguments];

NSPipe *pipe = [NSPipe pipe];
[readTask setStandardOutput:pipe];

NSFileHandle *file = [pipe fileHandleForReading];

[readTask launch];
[readTask release];

NSData *data = [file readDataToEndOfFile];

NSString *originalValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

所以现在你有了屏幕保护程序的idleTime的原始值.大!不要失去那个.现在,您必须设置新值:

NSTask *writeTask = [[NSTask alloc] init];
[writeTask setLaunchPath:@"/usr/bin/defaults"];

NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"write", @"com.apple.screensaver", @"idleTime", @"0", nil];
[writeTask setArguments:arguments];

[writeTask launch];
[writeTask release];

而且中提琴!你刚刚禁用了屏幕保护程序.要重新启用它,只需再次使用第二个代码块,但将originalValue作为最后一个数组对象传递而不是@“0”,如下所示:

NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"write", @"com.apple.screensaver", @"idleTime", originalValue, nil]

请享用!

比利

P.S.:最后一件事,您可能想要保存NSTask对象以重复使用它们,但事实并非如此.它们只能运行一次,因此每次要执行此操作时都必须创建新的.

0

精彩评论

暂无评论...
验证码 换一张
取 消