【问题标题】:How to refresh finder window?如何刷新查找器窗口?
【发布时间】:2012-01-17 09:30:37
【问题描述】:

我想刷新 Finder 应用程序中特定文件/文件夹的图标。

FNNotifyByPath( (const UInt8 *)folderPath, kFNDirectoryModifiedMessage, kNilOptions );  

FNNotifyByPath 不适用于此。 现在我正在尝试使用 appleScript

+(void) refreshIconForItem : (NSString *)itemPath
{
    NSString *source=[NSString stringWithFormat:@"tell application \"Finder\" to update \"%@\"",[NSString stringWithUTF8String:itemPath]];
    NSAppleScript *update=[[NSAppleScript alloc] initWithSource:source];
    NSDictionary *err;
    [update executeAndReturnError:&err];
}

但是这个功能也不起作用。

谁能帮帮我?

【问题讨论】:

  • 你找到这个解决方案了吗?请让我知道哪个脚本正在为此工作。因为我几乎使用了所有脚本,但不会使用任何脚本。任何帮助表示赞赏..!!
  • @Jigar 你可以使用stackoverflow.com/a/15541439/944634。 Finder 刷新苹果脚本不适用于 10.8 及更高版本

标签: objective-c cocoa applescript macos-carbon finder


【解决方案1】:

您在executeAndReturnError: 调用后检查了err 字典的值吗?

正确的 AppleScript 语法是:

@"告诉应用程序 \"Finder\" 更新 POSIX 文件 \"%@\""

编辑添加:或者,您可以下拉到 AppleEvent 级别:

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;
}

【讨论】:

  • 谢谢,它工作正常。我应该使用 executeAndReturnError: 方法还是应该使用 NSTask 运行 applescript?
  • 我会使用 executeAndReturnError:,或者我添加的 AppleEvent 方式。
  • 感谢 AppleEvent 代码。你能给我推荐一些 AppleEvents 的文档吗?这样我也可以学习这些东西。
  • 告诉应用程序 \"Finder\" 更新前窗口中的每个项目在 10.8 中不起作用。
  • 我的桌面上有一个应用程序包。它的路径是“/Users/noi/Desktop/noits.app”,但这个苹果脚本代码不起作用:"tell application "Finder" to update POSIX file "/Users/noi/Desktop/noits.app"我对这个脚本非常陌生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2012-02-29
  • 2011-06-22
相关资源
最近更新 更多