2017-01-17 15 views
3

私のアプリケーションのPreferences -> Security & Privacy -> Generalタブの設定を読んでみたいと思います。特に、ユーザーがパスワードを設定していて、「スリープまたはスクリーンセーバーの開始後に」すぐにパスワードが必要な場合や、遅れてしまった場合には、私は興味があります。 Security & Privacy General tabコマンドラインまたはプログラムで「セキュリティとプライバシー」の設定を読む方法

私は、スクリーンセーバーがデフォルトを見てキックインしたときに見つけられました。

コマンドライン:$ defaults -currentHost read com.apple.screensaver

コード:

CFPreferencesCopyValue(CFSTR("idleTime"), 
     CFSTR("com.apple.screensaver"), 
     kCFPreferencesCurrentUser, 
     kCFPreferencesCurrentHost); 

私は「セキュリティ&プライバシー」のplistファイルを見つけることを試みたが、私はのいずれかからこの設定を取得することができないよ同じ論法を使いますplstファイルは/Library/Preferences/または~/Library/Preferences/です。

私は値を読むことにのみ興味があります。だから私の質問は、これができますか?はいの場合、どうですか?

+1

私はあなたの質問について少し困惑しています。スクリーンセーバーセーバーが始動すると、パスワードが必要かどうか、そして遅延はどうなるのかという値だけを探したいのですか? 'defaults read com.apple.screensaver' *を* '-currentHost'なしで使用すると、その情報が返されます。 –

+0

ああ、私はこのことで混乱してしまった。とにかくこれを呼び出すと全く異なる結果が得られ、私はすべての答えを得るために両方の部分が必要です。だから、私はそれを受け入れることができるように適切な答えを書いていますか? – solgar

答えて

1

-currentHostを指定すると、defaultsによって返される情報は、ユーザーが現在ログインしているホストへの設定操作に制限されます(これらのホスト設定は~/Library/Preferences/ByHostにあります)。

通常、デフォルトデータベースの操作は、ユーザーがログインできるホストに適用されますが、特定の ホストにのみ適用されるように制限されている可能性があります。

ホストが指定されていない場合、ユーザーがログインできる任意のホストに設定操作が適用されます。

-currentHost 
    Restricts preferences operations to the host the user is currently logged in on. 

-host hostname 
    Restricts preferences operations to hostname. 

ので、情報を得るためにあなたがについて尋ねてきました:-currentHostオプションを省略することにより

$ defaults read com.apple.screensaver 

それは返す必要があります:

{ 
    askForPassword = 1; 
    askForPasswordDelay = 0; 
} 

あなたが使用したい場合CFPrefs

#import <CoreFoundation/CoreFoundation.h> 

#define EX_KEY "askForPasswordDelay" 
#define EX_ID "com.apple.screensaver" 

extern CFDictionaryRef _CFPreferencesCopyApplicationMap(CFStringRef userName, CFStringRef hostName); 

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool 
    { 
     CFURLRef current_url; 
     CFStringRef path; 
     CFMutableStringRef plist_path; 
     CFPropertyListRef value; 

     CFDictionaryRef app_map = _CFPreferencesCopyApplicationMap(
            kCFPreferencesCurrentUser, 
            kCFPreferencesAnyHost); 
     CFArrayRef urls = CFDictionaryGetValue(app_map, CFSTR(EX_ID)); 

     current_url = CFArrayGetValueAtIndex(urls, 0); 
     path = CFURLCopyPath(current_url); 

     plist_path = CFStringCreateMutable(kCFAllocatorDefault, 0); 
     CFStringAppend(plist_path, path); 
     CFStringAppend(plist_path, CFSTR(EX_ID)); 

     CFPropertyListRef prefs = CFPreferencesCopyValue(
     CFSTR(EX_KEY), 
     CFSTR(EX_ID), 
     CFSTR("kCFPreferencesCurrentUser"), 
     CFSTR("kCFPreferencesAnyHost")); 

     printf("CFPreferencesCopyValue \"%s\" of %s via ApplicationMap at path:\n", EX_KEY, EX_ID); 
     CFShow(plist_path); 
     CFShow(prefs); 

     CFRelease(prefs); 
     CFRelease(plist_path); 
     CFRelease(path); 
     CFRelease(app_map); 
    } 
} 

出力

CFPreferencesCopyValue "askForPasswordDelay" of com.apple.screensaver via ApplicationMap at path: 
/Users/Username/Library/Preferences/com.apple.screensaver 
<CFNumber 0x47 [0x7fffbf0a9d80]>{value = +0.0, type = kCFNumberFloat32Type} 

OSX Man Pages : defaults

関連する問題