【问题标题】:How to obtain IconRef from Application Resources如何从应用程序资源中获取 IconRef
【发布时间】:2012-09-02 07:51:36
【问题描述】:

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

【问题讨论】:

  • 如果您将使用 [[NSWokspace sharedWorkspace] setIcon:someIcon forFile:someFile options:0] 设置文件夹图标;将出现在 finder 侧边栏中。

标签: macos finder


【解决方案1】:

您可以使用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;
}

【讨论】:

  • 如果碰巧有一个NSURL*,可以将其转换为CFURLRef 并将其传递给CFURLGetFSRef
  • 这可行,但不幸的是不适合在 Mac OS X >= 10.7 上与LSSharedFileListInsertItemURL 一起使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2015-01-19
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多