如何获取当前位于其窗口列表顶部的Finder窗口的POSIX路径?最好是使用某种Cocoa框架,但我对任何事情都是开放的。
背景:我需要它,因为我想选择与正则表达式模式匹配的文件,从这个路径递归开始。我们的想法是使用
[[NSWorkspace sharedWorkspace] subpathsAtPath:thePath]方法来获取此路径的所有子路径,请在NSTask中使用"grep“(以避免打包正则表达式支持框架),并使用
[[NSWorkspace sharedWorkspace] selectFile:aFile inFileViewerRootedAtPath:thePath]在一个循环中,循环遍历由grep返回的条目组成的NSArray。
到目前为止,我已经研究了NSWorkspace、NSFileManager和NSApplication以及Xcode文档中的其他关键字搜索。
感谢您查看我的问题!
安德烈
PS:我不太确定grep的部分,也许我会把RegexKit Lite放在那里…
发布于 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个,我的结论是每一个都有它的问题,无论是在稳定性和灵活性方面。
我发现使用NSAppleScript的
A第四个选项
我现在依赖于围绕苹果脚本的一个非常棒的Objective C包装器,叫做AppScript。它已经存在很多年了,它很稳定,开发人员很棒,最重要的是它可以正常工作。
它有坚如磐石的方法,允许你发送苹果脚本,它甚至会为你整齐地返回错误,而不需要检查一大堆潜在的buggy和混乱的代码。
我已经使用它一年了,没有任何问题。如果你有任何关于如何做到这一点的其他问题,请不要犹豫,请不要犹豫,我将尽我所能回答他们。
发布于 2009-06-26 12:25:26
你可以通过AppleScript向查找器询问这个问题。
下面这一行代码对我很有效:
osascript -e 'tell application "Finder" to set myname to POSIX path of (target of window 1 as alias)'* this的修改版本。
发布于 2009-06-26 15:29:10
获取Finder中最前面窗口所表示的POSIX路径将涉及以某种方式将Apple事件发送到Finder。
您的选择包括:
使用苹果事件管理器(或NSAppleEventDescriptor和朋友)的
的
如果您正在构建一个Cocoa应用程序,OSAScript可能是最自然的选择。
https://stackoverflow.com/questions/1048666
复制相似问题