ウィンドウ上に複数存在するscroll areaのうち処理対象となるべきものを面積を計算することで特定するGUI Scripting系のAppleScriptです。
どーしてもGUI Scriptingでしか操作できない機能があって、それを自動化する価値があって、大幅に発生する可能性の高い労力を削減できる見込みが立ったので、一気に自動化Scriptを作成。本Scriptはその中で作成した1つの部品です。
自分が書いた処理内容は、Keynoteで作った書類の目次ページに用意した、各スライドのタイトルに実際のスライドへのリンクを付加するもの。
本来、Keynote自体のAppleScript用語辞書に標準装備されていてほしい機能です。残念ながら標準装備されていないために、自分で組む必要があったわけです。
それを作っている途中で、このメインの(Keynoteオブジェクトを配置する中央のエリア)scroll areaのIDが起動するたびに変わるという現象に直面。初期状態(インスペクタの表示状態)をそろえてもIDが変わる。たいていこうしたGUI Scriptingがらみの「怪奇現象」に直面した場合には、スクルプトエディタやアプリケーションの再起動を行えば回避できることが多いのですが、何回かためしても回避できなかったので、scroll areaの特定をID以外で行うことに。
IDが毎回(起動ごとに)変更になるので、「最大の面積を持つもの」を計算して求めるようにしてみました。
AppleScript名:面積で評価して、Keynoteのメインウィンドウのうち最大のもののItem Numberを返す |
— – Created by: Takaaki Naganoya – Created on: 2020/05/09 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set areaNum to getKenoteScrollAreaMax() of me –面積で評価して、Keynoteのメインウィンドウのうち最大のもののItem Numberを返す on getKenoteScrollAreaMax() tell application "System Events" tell process "Keynote" tell window 1 set sCount to count every scroll area set tmpMax to 0 set tmpMaxItem to 0 repeat with i from 1 to sCount tell scroll area i set tmpA to size copy tmpA to {tmpW, tmpH} set tmpArea to tmpW * tmpH if tmpArea > tmpMax then set tmpMax to tmpArea set tmpMaxItem to i end if end tell end repeat end tell end tell end tell return tmpMaxItem end getKenoteScrollAreaMax |
More from my site
(Visited 65 times, 1 visits today)