1

我正在使用NSWorkspacesetIcon:forFile:options:类的方法为文件和​​目录设置自定义图标。我的问题是,Finder 在重新启动之前不会反映图标视图中的图标更改。

图标视图:
在此处输入图像描述

在此处输入图像描述

列表视图(大纲视图):
在此处输入图像描述

4

1 回答 1

1

来自Carbon 开发技巧和窍门

您需要向 Finder 发送一个 kAESync AppleEvent 并将其传递给已更改文件的别名。

以下代码由JWWalker编写

OSStatus    SendFinderSyncEvent( const FSRef* inObjectRef )
{
    AppleEvent  theEvent = { typeNull, NULL };
    AppleEvent  replyEvent = { typeNull, NULL };
    AliasHandle itemAlias = NULL;
    const OSType    kFinderSig = 'MACS';

OSStatus    err = FSNewAliasMinimal( inObjectRef, &itemAlias );
if (err == noErr)
{
    err = AEBuildAppleEvent( kAEFinderSuite, kAESync, typeApplSignature,
        &kFinderSig, sizeof(OSType), kAutoGenerateReturnID,
        kAnyTransactionID, &theEvent, NULL, "'----':alis(@@)", itemAlias );

    if (err == noErr)
    {
        err = AESendMessage( &theEvent, &replyEvent, kAENoReply,
            kAEDefaultTimeout );

        AEDisposeDesc( &replyEvent );
        AEDisposeDesc( &theEvent );
    }

    DisposeHandle( (Handle)itemAlias );
}

    return err;
}
于 2012-03-09T05:42:23.260 回答