AppleScriptとiSync(MacOS X 10.4)

背景



iSyncは、アドレス帳、カレンダーを電話と同期するためのプログラムです。 正直に言うと、iSyncを開いてすべてを手で同期するのにうんざりしています。

挑戦する



自動的に同期するアプリケーション/スクリプト/ワークフローを作成します。 理想-iCal / AddressBookに変更を加えた後に同期する

解決策



AppleScriptが実装に選ばれました。 操作アルゴリズムは次のとおりです。



すぐに問題が発生しました-カレンダーの変更にどう従うか? 一見、追跡用の簡単なツールがないため、カレンダーアプリケーションを閉じるのをやめなければなりませんでした。

問題番号2-iSyncには電話と同期するコマンドがありません。データベース同期コマンドのみがあります。 exit-アプリケーションウィンドウがアクティブなときにキーストロークをシミュレートします。

問題番号3-同期プロセスを追跡する方法が明確ではない(完了したかどうか)。

iCalイベントをリッスンし、同期機能を有効にするAlways Runアプリケーション(AppleScriptサーバーの一種)を作成するオプションがありました。 最初の検査で、バリアントは消滅しました。

on quit application "iCal"

-- some code here

end quit







正しく動作しませんでした-サーバーアプリケーションの終了イベントがインターセプトされました。

すべてがひどいので、Automatorのワークフローを作成し、その呼び出しをFinderに埋め込むことにしました(実装は非常に歪んでいると主張しています)。

iSyncを呼び出してボタンクリックをシミュレートするコード:

tell application "iSync"

activate

end tell



tell application "System Events"

if UI elements enabled then

tell process "iSync"

set frontmost to true

end tell

-- iSync doesn't have a command to sync with device, so gettin' tricky with it

keystroke "t" using command down

keystroke return

end if

end tell






次にAutomatorが開かれ、ワークフローが1つのブロックから作成されました。AppleScriptの実行は、Finderのコンテキストメニューに組み込まれました。

Automatorスクリプトリスト

on run {input, parameters}

-- routine that forces iSync to sync with cell phone

tell application "iSync"

(activate)

(synchronize)

end tell



tell application "System Events"

if UI elements enabled then

tell process "iSync"

set frontmost to true

end tell

-- iSync doesn't have a command to sync with device, so gettin' tricky with it

keystroke "t" using command down

keystroke return

end if

delay 30

quit application "iSync"

end tell

return input

end run








この問題は解決されましたが、素晴らしいものではありませんでした。 より洗練された解決策を知っている場合は、コメントで登録解除してください。



All Articles