Mavericks以降、AppleScriptでGUIを操作するGUIスクリプティングの制限が厳しくなりました。
アクセシビリティの許可を各アプリごとに得なければならなくなり、今まで使えていた自動化の仕組みを全て調整し直さなくてはなりませんでした。
ぼくは、ScanSnapの操作をGUIスクリプティングで書いていました。
出来ればAppleScriptのアプリの状態で動かしたかったのですが、AppleScriptのアプリだと毎回実行ファイル自体が書き換えられているような動作をするので、同じアプリだと認識されずアクセシビリティの許可を毎回得なければならない状態で詰まっていました。
これを回避すべく、Automatorでスクリプトを実行してみると最初だけ許可を得る必要がありましたが、スムーズに実行できるようになりました。
自分の力量でこなせる自動化は全て自動化しておきたくて、とりあえず楽にできないかいつも考えています。
ScanSnapは、これが出来ないとかなり不便な状態でしたが、操作をできる状態に戻せてよかったです。
ぼくのScanSnapは、S1500なのでScanSnap SDKを使うことが出来ません。
しかし、GUIスクリプティングなら設定をボタン一つで変更したり、読み込みの継続や中止を別のMacから操作したりと割りと簡単にできます。
(ほしいな、iX500)
AppleScript
今使っているAppleScriptのは、次のようなものでScanSnap Managerを直接操作します。
ScanSnapGUIのchangeSet(settingName)
で、設定をポップアップルメニューから選んだり、continueScan()
で継続読み取りしたりという動作を制御できます。
set GUI to new() of ScanSnapGUI
changeSet("設定の名前") of GUI --設定を変更
continueScan() of GUI --継続読み取り
ここからが、スクリプトの本体です。
自由にお使いください。
script ScanSnapGUI
on new()
script _ScanSnapGUI
on closeWindow()
tell application "ScanSnap Manager"
activate
end tell
tell application "System Events"
tell application process "ScanSnap Manager"
tell window 1
tell group 2
click UI element 1
end tell
end tell
end tell
end tell
end closeWindow
on changeSet(settingName)
tell application "ScanSnap Manager"
activate
end tell
tell application "System Events"
tell application process "ScanSnap Manager"
click menu item 3 of item 2 of menu of menu bar 1
--ScanSnap Manager>設定…をクリック
tell window 1
--設定画面
tell group 2
--上部のグループ
tell pop up button 1
--読み取り設定ボタン
click
tell menu 1
--ポップアップメニュー
try
click menu item settingName
--読み取り設定を選択
end try
end tell
end tell
end tell
end tell
click button 1 of window 1
--適用ボタン
end tell
end tell
closeWindow()
end changeSet
on continueScan()
tell application "ScanSnap Manager"
activate
end tell
tell application "System Events"
tell application process "ScanSnap Manager"
click button "継続読み取り" of window "ScanSnap Manager - メッセージ" of application process "ScanSnap Manager" of application "System Events"
end tell
end tell
end continueScan
on abortScan()
tell application "ScanSnap Manager"
activate
end tell
tell application "System Events"
tell application process "ScanSnap Manager"
click button "読み取り中止" of window "ScanSnap Manager - メッセージ" of application process "ScanSnap Manager" of application "System Events"
end tell
end tell
end abortScan
on completeScan()
tell application "ScanSnap Manager.app"
activate
end tell
tell application "System Events"
tell application process "ScanSnap Manager"
try
click button "読み取り終了" of window "ScanSnap Manager - イメージ読み取りとファイル保存" of application process "ScanSnap Manager" of application "System Events"
end try
end tell
end tell
end completeScan
end script
end new
end script