objective-c - 如何关闭 Mac 屏幕保护程序?

标签 objective-c macos screensaver kiosk

我正在编写一个使用 Apple 的信息亭模式的应用程序。我想禁用屏幕保护程序,但“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];

现在您有了屏幕保护程序空闲时间的原始值。伟大的!不要失去那个。现在,您必须设置新值:

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 对象以重新使用它们,但不要这样做。它们只能运行一次,因此您每次想要执行此操作时都必须创建新的。

关于objective-c - 如何关闭 Mac 屏幕保护程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998196/

相关文章:

c++ - 热在多个显示器上播放高清视频

css - Mac 和 Windows 之间的提交按钮 CSS 样式不同

objective-c - 无法打开应用程序,因为它的可执行文件丢失

screensaver - 阻止屏幕保护程序

MacOsX : ScreenSaver -- how to get the path to . 保护程序包

cocoa - 如何在 Mac 上禁用屏幕保护程序/显示器 sleep

objective-c - 启用 iCloud - 停止在应用程序启动时显示打开的文件?

iphone - 相当于 Core Data 的 GROUP BY

c++ - 通过快速用户切换检测 Mac OS X 中事件 session 的 API

iphone - 如何按标题对充满 EKCalendars 的 NSArray 进行排序