2012年3月12日 星期一

自動化工作流程 (Mac OSX 篇)



最近工作時遇到一個小問題,詳細的情況我不方便透露,簡單的說,就是在我們工作中的某一部份,必須時常做一連串重複的電腦操作,而每一次之間的差異可能只是檔名的不同 (想成轉檔會比較好理解  XD)。很久以前就有人問 "有沒有比較快的方法?" 而上級不知道該怎麼解決,於是就說沒辦法。如今,我也開始面臨這些機械性的操作,於是我找了一下解法,最後解決了這個問題,也藉由這個契機,我來分享一下自動化電腦操作的方法。

For Mac OSX
對於 Mac OSX 使用者來說,自動化操作實在是再簡單也不過了,因為系統就內建著名字稱為 "自動人" 的應用程式阿~Automator,而且這個小軟體自從在 Mac OSX 10.4 裡出現之後,隨著 Mac OSX 版本的演進,功能越來越強,要寫些小程式直接用它就綽綽有餘。不過,Automator 也不是那麼萬能,我想很多人都曾經有過這個念頭 -- "哎唷 .... 我希望有 XXX 功能,怎麼 Automator 裡沒得選?" 原因就在於 Automator 只是一種程式語言-- Applescript 的精簡 GUI 版 [1],之所以能控制其他程式,是因為該程式夠佛心,有包含供 Applescript 驅動的目錄及程式碼,不然 Applecript 也是動不了它 (當然 Automator 也是 ....),而以我個人的經驗,有提供 Applescript 控制項的程式其實不多

由於 Automator 實在做得很好,所以這次就不提 "建立工作流程" 的使用技巧,相信很多人比我還會用,而這次的主題則是 "如何操控不支援 Applescript 驅動的程式",或者更廣泛地說,就是 "如何將任意一連串的操作錄製成一個自動化程式",這檔子事一般也稱作 UI Scripting

1. Automator Recording


在 Mac OSX 10.5 裡,Automator 新增了很多實用的功能,但其中有一項功能常常被使用者忽略,就是 "錄製" 功能!這項功能正如它字面上的意思 -- 錄製一切你在 GUI 上做的操作

Automator 是如何達成這項任務的呢?答案是引進一個新的動作 (action) -- "Watch Me Do",但你不用親自去啟動它,只要按下右上角的 "錄音" 鍵,它就會跳出來並紀錄你的一舉一動,錄製結束就按下 "Watch Me Do" 浮動視窗中的 "停止" 鍵即可 (如右圖)。

如上,非常簡單,但是它並不是所有的動作都能記錄下來,比如說移動滑鼠游標到某個 icon 上晃一晃就不行,因為這種動作不在 "System Events" 的控制之下,無法被它所辨認,至於 System Events 是什麼東西請看下一段。

2. System Events


System Events 是一個背景程式,掌管著 Mac OSX 的 GUI 與程式之間的互動,雖然它無法百分之百地辨識所有的互動,但對於不支援 Applescript 操控的程式來說,它已經突破這個障礙了。上圖就是 "Upstair" 的內部程式碼,它所做的事不過就是呼叫 System Events,然後要它盯上 Finder,先讓 Finder 變成前景程式,最後按下 "選單列 (menu bar)" > "前往 (menu 6)" > "上層資料夾 (menu item 3)" 的選項而已,簡單明瞭。

那麼,呼叫 System Events 的方式跟 Automator Recording 有何不同呢?基本上這就跟 Applescript 及 Automator 的關係類似,兩者其實是一樣的東西,只是 Apple 佛心把它包成 GUI 版而已 (其實有一項差異:::Automator Recording 是 10.5 later ....)。但是,包成 GUI 版之後,也跟 Automator 一樣少了點彈性,而且執行速度會稍慢一些,如果不介意自己動手寫程式碼,又想讓自己的 script 有更多額外的功能,直接朝向 Applescript + System Events calling 去努力是不會讓你失望的。

附帶一提,上述兩種方法都是利用 System Events 去驅動其他程式,所以限制也相同。在開始 UI Scripting 之前,"系統偏好設定" > "輔助使用" > "為輔助設備啟用存取權限 (Enable access for assistive devices)" 的選取框 (左下角) 必須勾選,System Events 才能存取 GUI 與程式之間的互動,螢幕擷圖如下:


======================

以上,很簡單吧?在 Mac OSX 裡有著太多好用的工具,像是那些無生產力的工作就該盡量讓程式代勞,而把時間拿去做更有用的事情。

Mac OSX,真的不是只有 eye candy 而已。


附註
1. 我一直認為 Automator 是 Mac OSX 裡最偉大的內建軟體之一,因為它成功地讓一般人只藉由拖拉放就能製作自己要用的小程式,哪個作業系統裡有這麼優秀的應用程式?而且還是內建的。

沒有留言:

張貼留言