Apple のキオスク モードを使用するアプリケーションを作成しています。スクリーン セーバーを無効にしたいのですが、「ScreenSaverDefaults」クラスが 32 ビットのみであると報告しています。ビルドを 32 ビットのみに変更できますが、64 ビット アーキテクチャもサポートできるようにしたいと考えています。
スクリーンセーバーを無効にするために使用する必要がある他のフレームワークはありますか?
Apple のキオスク モードを使用するアプリケーションを作成しています。スクリーン セーバーを無効にしたいのですが、「ScreenSaverDefaults」クラスが 32 ビットのみであると報告しています。ビルドを 32 ビットのみに変更できますが、64 ビット アーキテクチャもサポートできるようにしたいと考えています。
スクリーンセーバーを無効にするために使用する必要がある他のフレームワークはありますか?
これを行う方法を探していて(私がやっているように)、設定ファイルの編集をいじりたくない人のために、Appleには、アプリケーションの実行中にスクリーンセーバーが起動しないようにする適切な方法があります。
お役に立てれば。
まず、現在の設定を保存して、オフにする前の状態に戻す必要があります。
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];
そしてヴィオラ!スクリーンセーバーを無効にしました。@"0"
再度有効にするには、コードの 2 番目のブロックを再度使用しますが、次のように、ではなく最後の配列オブジェクトとして originalValue を渡します。
NSArray *arguments = [NSArray arrayWithObjects:@"-currentHost", @"write", @"com.apple.screensaver", @"idleTime", originalValue, nil]
楽しみ!
ビリー
PS: 最後に、NSTask オブジェクトを保存して再利用したくなるかもしれませんが、そうしないでください。それらは 1 回しか実行できないため、実行するたびに新しいものを作成する必要があります。
私が最終的に行ったことは、com.apple.screensaver
設定ファイルを直接読み取り、idleTime
とのaskForPassword
値を変更して がゼロになるようにすることでした。シンプルCFPreferencesSynchronize
ですべてが順調でした!