2012-09-02 46 views
1

我想使用LSSharedFileList API將定製地點添加到Finder收藏夾側欄,如here所述。但我需要爲此項目添加一個自定義圖標。該圖標應該在IconRef類型中。我還沒有找到辦法做到這一點。只發現了一個mention的事實,即需要使用Icon服務。但是如何?如何從應用程序資源中獲取IconRef

+0

如果您將使用[[NSWokspace sharedWorkspace] setIcon:someIcon forFile:someFile options: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; 
} 
+0

如果碰巧有一個'NSURL *',可以將其轉換爲'CFURLRef'並將其傳遞給'CFURLGetFSRef'。 – JWWalker

+0

這可行,但不幸的是不適合在Mac OS X上使用'LSSharedFileListInsertItemURL'> = 10.7 – ZeroDivisi0n

相關問題