動的にアプリケーションのメニューをたどって目的のメニュー項目のオブジェクトを取得し、強制的にクリックを行うAppleScriptです。
GUI Scriptingのメニュークリックの効率化を行います。アプリケーション名とクリックさせるメニュー項目のメニューバーからの階層のメニュータイトルを順次記述したリストを渡すと、クリックを行います。
GUI Scriptingは強力なソリューションではありますが、たとえばメニューの強制操作を行うのであれば、メニュー項目がイネーブルになっているか事前に確認する必要がありますし、OSやアプリケーションのバージョンアップ時にメニュー項目の並び順が変わったりすると効かなかったりします。
そのため、目的のメニュー項目の並び順が変わったぐらいでは影響がないように備えるぐらいはしておきたいところです。
これまでにも、タイトルを指定すると指定アプリケーションのすべてのGUI要素から検索して実行するようなScriptを作成して試してみてはいたのですが、これだと全GUI要素をいったん取得して絞り込み検索を行うので、処理速度がいまひとつです(正直なところ、遅い)。
なので、それほど高機能ではないものの、スピードが速いものを作ってみました。メニューをたどって目的のメニュー項目を探し出します。メニュー項目を順番にリストに記述すればよいだけなので、普通にtell文でオブジェクト階層を指定するよりも手軽です。
AppleScript名:Dynamic Menu Clicker |
— – Created by: Takaaki Naganoya – Created on: 2018/12/31 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" use scripting additions use framework "Foundation" –Force Menu item Clicker by parameters set appName to "Keynote" –Application Name set aList to {"配置", "オブジェクトを整列", "左揃え"} –Localized Menu Titles set aRes to clickSpecifiedMenuElement(appName, aList) of me on clickSpecifiedMenuElement(appName as string, menuList as list) set menuObj to generateMenuItemReference(appName, menuList) of me if menuObj = false then return false tell application appName to activate tell application "System Events" click menuObj end tell end clickSpecifiedMenuElement on generateMenuItemReference(appName, aList) tell application "System Events" tell application process appName set fItem to contents of first item of aList set aList to rest of aList set anObj to menu fItem of menu bar item fItem of menu bar 1 set aLen to length of aList repeat with i from 1 to aLen – 1 set j to contents of item i of aList set tmpObj to menu j of menu item j of anObj copy tmpObj to anObj end repeat set tmpObj2 to menu item (contents of last item of aList) of anObj set exRes to exists of tmpObj2 if exRes = true then return tmpObj2 else return false end if end tell end tell end generateMenuItemReference |
Dynamic Menu Clicker v2 – AppleScriptの穴 says:
[…] を行うAppleScript「Dynamic Menu Clicker」の改良版(v2)です。 […]