是否可以使用Scripting Bridge框架將POSIX路徑或目標移動到最前面的窗口?ScriptingBridge Finder POSIX路徑
我使用
FinderApplication *theFinder = [SBApplication aplicationWithBundleIdentifier:@"com.apple.Finder";
,但我無法找到「Finder.h」任何可能的工作。
是否可以使用Scripting Bridge框架將POSIX路徑或目標移動到最前面的窗口?ScriptingBridge Finder POSIX路徑
我使用
FinderApplication *theFinder = [SBApplication aplicationWithBundleIdentifier:@"com.apple.Finder";
,但我無法找到「Finder.h」任何可能的工作。
這可能是你使用什麼和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);
我還沒有使用ScriptingBridge。作爲NSAppleScript的一部分,它將是:
get POSIX path of (target of window 1 as alias)
希望有幫助。我認爲POSIX部分來自StandardAdditions ScriptingAddition,而不是Finder本身。
通過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中的功能之一。
附錄:Finder的設計師們不夠好,包括'URL'屬性,會給你一個文件的URL字符串。稍微擺弄一下,你可能會說服SB檢索這個值,此時你可以使用NSURL來轉換一個POSIX路徑字符串。 – has 2010-06-19 14:46:24
是的,好主意,正是我需要的。謝謝。 – sergiobuj 2010-06-20 00:45:21
很高興幫助, 記住把它放在try/catch塊之類的東西里,否則如果沒有窗口打開,你會得到一個'越界'的錯誤。 – markhunte 2010-06-20 08:49:46