【问题标题】:How do I shut off the Mac screensaver?如何关闭 Mac 屏幕保护程序?
【发布时间】:2011-03-01 04:53:27
【问题描述】:

我正在编写一个使用 Apple 信息亭模式的应用程序。我想禁用屏幕保护程序,但“ScreenSaverDefaults”类将自身报告为仅 32 位。我可以将构建更改为仅 32 位,但我也希望能够支持 64 位架构。

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

【问题讨论】:

    标签: objective-c macos screensaver kiosk


    【解决方案1】:

    首先,您需要保存当前设置,以便将其恢复为关闭之前的状态:

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

    【讨论】:

      【解决方案2】:

      对于正在搜索如何执行此操作(就像我一直在做的那样)并且不想搞乱编辑首选项文件的任何人,Apple 有一个适当的方法来阻止屏幕保护程序在您的应用程序运行时启动.

      Technical Q&A QA1160: Preventing sleep

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        我最终做的是直接读取com.apple.screensaver 首选项文件并修改idleTimeaskForPassword 值以使它们为零。一个简单的CFPreferencesSynchronize,一切都很好!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-04
          • 1970-01-01
          • 2012-12-04
          • 1970-01-01
          • 1970-01-01
          • 2016-02-20
          • 1970-01-01
          • 2011-07-25
          相关资源
          最近更新 更多