4

Apple のキオスク モードを使用するアプリケーションを作成しています。スクリーン セーバーを無効にしたいのですが、「ScreenSaverDefaults」クラスが 32 ビットのみであると報告しています。ビルドを 32 ビットのみに変更できますが、64 ビット アーキテクチャもサポートできるようにしたいと考えています。

スクリーンセーバーを無効にするために使用する必要がある他のフレームワークはありますか?

4

3 に答える 3

3

これを行う方法を探していて(私がやっているように)、設定ファイルの編集をいじりたくない人のために、Appleには、アプリケーションの実行中にスクリーンセーバーが起動しないようにする適切な方法があります。

技術的なQ&A QA1160:睡眠の防止

お役に立てれば。

于 2011-09-08T22:29:10.073 に答える
3

まず、現在の設定を保存して、オフにする前の状態に戻す必要があります。

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 回しか実行できないため、実行するたびに新しいものを作成する必要があります。

于 2010-12-13T14:32:07.783 に答える
1

私が最終的に行ったことは、com.apple.screensaver設定ファイルを直接読み取り、idleTimeとのaskForPassword値を変更して がゼロになるようにすることでした。シンプルCFPreferencesSynchronizeですべてが順調でした!

于 2011-03-15T15:00:47.127 に答える