2009-06-26 36 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可能是最自然的選擇。