2010-06-19 54 views
4

是否可以使用Scripting Bridge框架將POSIX路徑或目標移動到最前面的窗口?ScriptingBridge Finder POSIX路徑

我使用

FinderApplication *theFinder = [SBApplication aplicationWithBundleIdentifier:@"com.apple.Finder"; 

,但我無法找到「Finder.h」任何可能的工作。

回答

4

這可能是你使用什麼和ScriptingBridge後NSURL

FinderApplication *finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder"]; 

SBElementArray *windows = [finder windows ]; // array of finder windows 
NSArray *targetArray = [windows arrayByApplyingSelector:@selector(target)];// array of targets of the windows 

//gets the first object from the targetArray,gets its URL, and converts it to a posix path 
NSString * newURLString = [[NSURL URLWithString: (id) [[targetArray objectAtIndex:0]URL]] path]; 

NSLog(@"newURLString %@ ", newURLString); 
+0

是的,好主意,正是我需要的。謝謝。 – sergiobuj 2010-06-20 00:45:21

+0

很高興幫助, 記住把它放在try/catch塊之類的東西里,否則如果沒有窗口打開,你會得到一個'越界'的錯誤。 – markhunte 2010-06-20 08:49:46

0

我還沒有使用ScriptingBridge。作爲NSAppleScript的一部分,它將是:

get POSIX path of (target of window 1 as alias) 

希望有幫助。我認爲POSIX部分來自StandardAdditions ScriptingAddition,而不是Finder本身。

2

通過appscript's ASTranslate工具運行drawnonward的代碼給了我這樣的:

#import "FNGlue/FNGlue.h" 
FNApplication *finder = [FNApplication applicationWithName: @"Finder"]; 
FNReference *ref = [[[finder windows] at: 1] target]; 
FNGetCommand *cmd = [[ref get] requestedType: [ASConstant alias]]; 
id result = [cmd send]; 

其結果將是一個ASAlias實例;使用 - [ASAlias路徑]來獲取POSIX路徑。

你不能在SB中使用原始Apple事件代碼,因爲這是Apple的工程師忘記/不打算將其放入SB的less than stellar API中的功能之一。

+0

附錄:Finder的設計師們不夠好,包括'URL'屬性,會給你一個文件的URL字符串。稍微擺弄一下,你可能會說服SB檢索這個值,此時你可以使用NSURL來轉換一個POSIX路徑字符串。 – has 2010-06-19 14:46:24

相關問題