• OSX 监听系统网络设置


    由于日常开发的需求,我们需要监听OSX一些系统设置的变化,达到软件程序设置的同步,这时我们可以通过以下函数监听系统设置的改变:

    #include <SystemConfiguration/SystemConfiguration.h>
    
    SCDynamicStoreRef dynStore;
    SCDynamicStoreContext context = {0, this, NULL, NULL, NULL};
    dynStore = SCDynamicStoreCreate(kCFAllocatorDefault,
        CFBundleGetIdentifier(CFBundleGetMainBundle()),
        SystemProxyChangeCallBack,//自定义回调函数,备注【1】
        &context);
    const CFStringRef keys[3] = {CFSTR("State:/Network/Global/Proxies")};//获取系统代理设置,备注【2】
    CFArrayRef watchedKeys = CFArrayCreate(kCFAllocatorDefault,
        (const void **)keys,
    1,
        &kCFTypeArrayCallBacks);
    if (SCDynamicStoreSetNotificationKeys(dynStore, NULL, watchedKeys))
    {
        CFRelease(watchedKeys);
        CFRunLoopSourceRef rlSrc = SCDynamicStoreCreateRunLoopSource(kCFAllocatorDefault, dynStore, 0);
        CFRunLoopAddSource(CFRunLoopGetCurrent(), rlSrc, kCFRunLoopDefaultMode);
        CFRelease(rlSrc);
    }
    else
    {
        CFRelease(watchedKeys);
        CFRelease(dynStore);
        dynStore = NULL;
    }

    CFRunLoopRun(); //在程序中需要调用该函数监听效果

    备注【1】,当系统设置有所改变时,会触发该回调函数,可根据具体需要做相关的操作处理

    void SystemProxyChangeCallBack(SCDynamicStoreRef store, CFArrayRef changedKeys,void *info)
    {
    }

    备注【2】,这里demo程序为监听网络代理改变属性的设置,其他属性值可参考:

    https://developer.apple.com/library/mac/documentation/Networking/Conceptual/SystemConfigFrameworks/SC_UnderstandSchema/SC_UnderstandSchema.html

  • 相关阅读:
    Heritrix 3.1.0 源码解析(二十五)
    Heritrix 3.1.0 源码解析(二十八)
    获取某年某月的第一天和最后一天的Sql Server函数
    C# ToString()用法汇总
    数据库隐式类型转换
    sql server 中 SET identity_insert on
    Linq To DataTable
    ASP.NET Session详解[转载]
    CSS overflow 属性
    HTML相对路径(Relative Path)和绝对路径(Absolute Path)
  • 原文地址:https://www.cnblogs.com/sz-leez/p/4490101.html
Copyright © 2020-2023  润新知