首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Finder前窗口的POSIX路径

获取Finder前窗口的POSIX路径
EN

Stack Overflow用户
提问于 2009-06-26 11:38:34
回答 4查看 2K关注 0票数 4

如何获取当前位于其窗口列表顶部的Finder窗口的POSIX路径?最好是使用某种Cocoa框架,但我对任何事情都是开放的。

背景:我需要它,因为我想选择与正则表达式模式匹配的文件,从这个路径递归开始。我们的想法是使用

代码语言:javascript
复制
[[NSWorkspace sharedWorkspace] subpathsAtPath:thePath]

方法来获取此路径的所有子路径,请在NSTask中使用"grep“(以避免打包正则表达式支持框架),并使用

代码语言:javascript
复制
[[NSWorkspace sharedWorkspace] selectFile:aFile inFileViewerRootedAtPath:thePath]

在一个循环中,循环遍历由grep返回的条目组成的NSArray。

到目前为止,我已经研究了NSWorkspace、NSFileManager和NSApplication以及Xcode文档中的其他关键字搜索。

感谢您查看我的问题!

安德烈

PS:我不太确定grep的部分,也许我会把RegexKit Lite放在那里…

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-16 10:37:24

我正在开发一个商业应用程序,它完全可以做你所描述的事情,一年多来,我一直在尝试各种不同的方法。我是一个新手开发人员,所以我完全接受这样的想法,即可能有比我的方式更好的方式,但它似乎是稳定和有效的。

我使用 Script

我每隔3秒获取一次活动文档的路径,但如果活动应用程序是Finder,我就会获取活动窗口的路径。我使用Apple Script完成此操作,如公认的答案所述。

使用Carbon获取窗口列表

要获得所有进程的窗口列表以获取窗口ID (苹果脚本不能做的事情),我使用CGWindowListCopyWindowInfo,如下面的问题所示:

Getting a unique ID for a window of another application

这向我呈现了一个数组,其中所有进程的所有窗口都排序在最前面。所以我需要做的就是从数组中取出第一个条目。这也可以用来截取前窗口的屏幕截图,如果这对你有帮助的话,就像Grab示例应用程序的儿子中所示,这对我来说是一个非常有价值的工作示例。

从Cocoa发送苹果脚本

谈到Apple Script,我已经尝试了Jim建议的所有3个,我的结论是每一个都有它的问题,无论是在稳定性和灵活性方面。

  1. 苹果事件管理器依赖于您发送原始的苹果事件。对我来说,这太像是艰苦的工作和太低的水平。

我发现使用NSAppleScript的

  1. 很慢,而且容易出错。当你想像我一样发送各种各样的苹果脚本消息时,它也是相当笨拙的。

  1. 当我读到Scripting Bridge时,我非常兴奋,只是尝试了一下,却感到非常失望。对于我试图获取的窗口的属性,它甚至无法识别它们是否存在。对我来说,这似乎是错误的和奇怪的。我希望你发送的命令能得到SB的支持,这将是最好的选择。

A第四个选项

我现在依赖于围绕苹果脚本的一个非常棒的Objective C包装器,叫做AppScript。它已经存在很多年了,它很稳定,开发人员很棒,最重要的是它可以正常工作。

它有坚如磐石的方法,允许你发送苹果脚本,它甚至会为你整齐地返回错误,而不需要检查一大堆潜在的buggy和混乱的代码。

我已经使用它一年了,没有任何问题。如果你有任何关于如何做到这一点的其他问题,请不要犹豫,请不要犹豫,我将尽我所能回答他们。

票数 3
EN

Stack Overflow用户

发布于 2009-06-26 12:25:26

你可以通过AppleScript向查找器询问这个问题。

下面这一行代码对我很有效:

代码语言:javascript
复制
osascript -e 'tell application "Finder" to set myname to POSIX path of (target of window 1 as alias)'

* this的修改版本。

票数 5
EN

Stack Overflow用户

发布于 2009-06-26 15:29:10

获取Finder中最前面窗口所表示的POSIX路径将涉及以某种方式将Apple事件发送到Finder。

您的选择包括:

使用苹果事件管理器(或NSAppleEventDescriptor和朋友)的

  • 和NSAppleScript或OSAScript对象。使用ScriptingBridge.

如果您正在构建一个Cocoa应用程序,OSAScript可能是最自然的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1048666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档