【问题标题】:How to programmatically focus Desktop/Finder via Mac App?如何通过 Mac App 以编程方式聚焦桌面/Finder?
【发布时间】:2013-03-15 20:10:32
【问题描述】:

我想通过我的应用程序关注桌面/查找器,尤其是当用户当前在全屏应用程序中时。 我一直在尝试使用类似的东西:

[[NSWorkspace sharedWorkspace] launchApplication:@"Finder"];

[[NSWorkspace sharedWorkspace] openFile:nil withApplication:@"Finder"];

但是使用这些代码行,一个新的 Finder 窗口将打开“所有文件”。
我只想专注于桌面/Finder,我该怎么做?正在寻找适用于 App Store 的代码。
谢谢!

【问题讨论】:

  • 这里好像可以使用applescript...
  • 我认为苹果不会允许使用 applescript 与 Finder 一起玩的沙盒应用程序
  • 这里不需要AS..可以激活NSRunningApplication

标签: objective-c macos cocoa desktop finder


【解决方案1】:

您可以使用 cocoa 的 NSWorkspace 来完成 - 不需要特殊权利

NSArray *apps = [[NSWorkspace sharedWorkspace] runningApplications];

for (NSRunningApplication *app in apps) {
    if([app.bundleIdentifier.lowercaseString isEqualToString:@"com.apple.finder"]) {
        [app activateWithOptions:NSApplicationActivateAllWindows|NSApplicationActivateIgnoringOtherApps];
        break;
    }
}

【讨论】:

    【解决方案2】:

    这可以使用 applescript 来完成,在经过一些研究和一些权利条目之后,应该可以与 mac 商店应用程序一起使用。

    这是一个 AppleScript 脚本,可以满足您的要求:

    tell application "Finder" to activate
    

    权利条目:

    <key>com.apple.security.temporary-exception.apple-events</key>
    <array>
        <string>com.apple.finder</string>
    </array>
    

    您可以阅读有关权利流程的更多信息 herehere

    我知道这不是一个完整的答案 - 我不是 Mac 专家。我只是想尝试为您指出解决问题的正确方向。

    【讨论】:

    • 这应该可以工作......但你不需要 AS ......秒我会尝试使用可可来做到这一点
    【解决方案3】:

    Swift,使用NSRunningApplication.runningApplications

    NSRunningApplication.runningApplications(withBundleIdentifier: "com.apple.finder").first?.activate(options: [])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2011-08-05
      相关资源
      最近更新 更多