如何从应用程序资源中获取IconRef

时间:2012-09-02 07:51:36

标签: macos finder

我想使用LSSharedFileList API将自定义位置添加到Finder收藏夹侧边栏,如here所述。但我需要为此项添加自定义图标。该图标应为IconRef类型。我还没有办法做到这一点。只找到mention需要使用Icon Services的事实。但是如何?

1 个答案:

答案 0 :(得分:2)

您可以使用Scplugin的此功能。

static IconRef IconRefFromIconFileNoCache(CFStringRef file)
{
    IconRef iconRef;
    IconFamilyHandle iconFamily;
    FSRef fileRef;
    CFURLRef url;
    Boolean ok;

    url = CFURLCreateWithFileSystemPath(NULL,file,kCFURLPOSIXPathStyle,false);
    if (!url)
        return 0;

    ok = CFURLGetFSRef(url,&fileRef);
    CFRelease(url);
    if (!ok)
        return 0;


    if (ReadIconFromFSRef(&fileRef, &iconFamily))
        return nil;

    iconRef = 0;
    HLock((Handle)iconFamily);
    GetIconRefFromIconFamilyPtr(*iconFamily,(**iconFamily).resourceSize,&iconRef);
    DisposeHandle((Handle)iconFamily);

    return iconRef;
}