2011-01-20 99 views
0

我有一個AppleScript,我試圖轉換爲ScriptingBridge。由於我的應用程序是一個C++/Obj-C應用程序,ScriptingBridge使用起來更容易,而且速度更快(更不用說我討厭動態構建AppleScript)。使用ScriptingBridge打開文件

AppleScript向Photoshop發送信息以打開文件。文件參數作爲alias發送,但ScriptingBridge將該參數導入爲id。我不知道我應該傳入什麼Obj-C對象?

我試過傳遞一個NSURL和一個NSString(可能不正確:-P),但無濟於事。關於我應該傳遞給文件別名的任何建議?

回答

1

簡而言之,您無法使用Scripting Bridge在Photoshop中打開文檔。

蘋果的文檔真的拼出來就像它一樣。所有的類必須具有容器,該容器是一個可變的陣列,它們需要被添加到它們可被作用之前,如圖生成的頭...

@interface photoshopCS4Application : SBApplication 

- (SBElementArray *) documents; 
- (SBElementArray *) fonts; 
- (SBElementArray *) notifiers; 

...,這是我們提供的頂級容器的完整列表。要生成並填充open命令需要 a photoshopCS4OpenOptions。由於API不公開陣列以存儲新創建的photoshopCS4OpenOptions對象,因此我們無法使用新創建的photoshopCS4OpenOptions對象。因此,我們無法創建目標文檔,並且擴展名不能在腳本橋中使用open命令。所有需要某種選項對象的命令都可以這樣說。

我已經解決的唯一解決方法是打開一個文本,其中包含從Cocoa或objc-appscript調用的本地AppleScript,然後解析documents陣列尋找剛纔打開的文件。這並不理想,但之後也不是Scripting Bridge,因爲它要求應用程序開發人員以非OSA框架本身的特定方式編寫腳本API。

1

如果你的程序是這樣的:打開Photoshop文檔可以在你的AppleScript腳本/腳本橋碼外被執行,可可提供與特定的應用程序中打開文件的方法:

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd" withApplication:@"Adobe Photoshop CS4"]; 

,或者,如果你想要使用處理該文件類型的默認應用程序,可以完全刪除應用程序名稱:

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd"]; 
+0

很酷,這是另一種可以說比我提出的更好的方式。需要注意的是,如果打開成功,OP仍然需要通過`documents`數組來查找剛纔打開的文件。 – 2011-01-21 15:31:17

0

考慮使用Appscript。 http://appscript.sourceforge.net/

下面是一個使用該代碼:

APApplication * adobePhotoshopCs4 = [APApplication applicationWithName:@ 「Adobe公司的Photoshop CS4」]; id result = [[adobePhotoshopCs4 open_] send]; (注意,我不是Cocoa程序員 - 我主要在Python中使用Appscript,但Appscript帶有ASTranslate,它將AppleScript轉換爲Python,Ruby或Obj-C,這就是輸出 - 但我發現它有微妙的變化過去的錯誤有時與譯者)