2009-06-26 78 views
3

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

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

[[NSWorkspace sharedWorkspace] subpathsAtPath:thePath] 

方法来获取该路径的所有后代,请使用“grep的”在NSTask(避免包装正则表达式的支持框架),并在循环使用

[[NSWorkspace sharedWorkspace] selectFile:aFile inFileViewerRootedAtPath:thePath] 

循环遍历由grep返回的条目组成的NSArray。

到目前为止,我在Xcode文档中查看了NSWorkspace,NSFileManager和NSApplication以及其他关键字搜索。

感谢您检查我的问题!

安德烈

PS:我不知道grep的一部分,也许我就一巴掌RegexKit精简版在那里...

回答

3

我正在开发一个商业应用程序,它完全符合您的描述,并且我一直在使用这种方法进行一年多的混乱。我是一个新手开发者,所以我完全接受这样的想法,即可能有比我的方式更好的方式,但它似乎是稳定的和工作的。

我用苹果脚本

我得到的活动文档的路径每3秒,但如果应用程序为Finder中,我得到的活动窗口的路径。我按照公认的答案所述使用Apple脚本执行此操作。

获得使用碳

要获得所有进程的窗口列表获取窗口ID(苹果的东西脚本不能做),我用CGWindowListCopyWindowInfo作为这个问题的详细窗口列表:

Getting a unique ID for a window of another application

这给我一个数组,其中所有进程的窗口都是按最前面排序的。所以我需要做的就是从数组中取第一个入口。这也可以用来获取前窗的屏幕抓图,如果这对你有帮助,就像抓取子示例应用程序中显示的那样,这对我来说是一个有用的示例。

从可可

发送苹果脚本当谈到苹果脚本,我已经尝试了所有3吉姆表明,我的结论是,每一个都有它的问题,无论是在稳定性和灵活性方面。

  1. Apple Event Manager依靠你 发送原始Apple事件。对我而言, 这太辛苦了, 太低了。

  2. 使用NSAppleScript我发现是 缓慢和容易出错。这也是 相当笨拙,当你想发送一个 整个品种的苹果脚本 消息,因为我这样做。

  3. 当阅读关于脚本桥, 我非常兴奋,只能尝试它 出来,非常失望。对于 属性的窗口我是 试图抢,它甚至没有 认为它们是现有的。它似乎 对我来说是越野车和怪异的。我希望 如果你发送的命令是SB支持的 ,那将是最好的 选项。

第四个选择

我现在依靠各地苹果脚本一个神话般的目标C包装称为AppScript。它已经存在很多年了,它很稳定,开发人员非常棒,最重要的是它的工作原理。

它有坚如磐石的方法,让你送苹果脚本,它甚至会为你整齐地返回错误,而潜在的越野车和乱码需要检查他们的整体负载。

我一直在使用它一年没有问题。如果您有任何其他问题想知道如何做到这一点,请不要犹豫,我会尽我所能来回答。

5

你可以很可能是通过一个AppleScript问搜索这一点。

这*的一行工作对我来说:

​​

*的this修改后的版本。

+0

啊对...我完全忘了AppleScript。非常高兴知道这是一个备份计划。你也碰巧知道一个或两个在Cocoa/Carbon中处理这个问题的指针吗?我想知道http://www.manytricks.com/witch如何获得所有窗口的列表... 感谢你写这个:) – andreb 2009-06-26 15:09:34

+0

我不知道一个Cocoa/Carbon界面,它可以检查另一个进程的窗口列表。即使你可以,你如何确定它对应的路径? – 2009-06-26 17:07:00

+0

谢谢你,这正是我所追求的。我错过了首次转换为别名。我试图做“像POSIX路径”而不是你的“作为别名”和“(窗口1的目标)的POSIX路径”这样的事情,但没有运气。对我来说,你似乎很困惑,你首先必须转换为别名..! – 2012-08-07 18:25:14

2

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

您的选择包括:

  • 使用苹果事件管理器(或NSAppleEventDescriptor和朋友)直接。
  • 使用NSAppleScript或OSAScript对象。
  • 使用ScriptingBridge。

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