「操作自動化」の観点からするとメイン機能、「業務自動化」の観点からすると必要悪、操作対象のアプリのGUI部品の状況を想定どおりに設定しておけないと、Script動作の再現がなかなか大変なので、極力使わないでおきたいGUI Scripting。
PagesのAppleScript対応機能は必要な機能が呼び出せないのと、現在表示中のページ+5ページまでしか各種オブジェクトの属性値にアクセスできないので、書類の表示倍率を強制的に変更する必要があります。PagesのAppleScript用語辞書にそのような機能は実装されていないので、仕方なくGUI Scriptingで組むことに。
そんな中、各種パレットが表示されていると、パレットがwindow 1として認識されるため、作業前にパレットを消去しておく必要を感じました。
そこで、指定アプリのパレット表示状態を検知してクローズするAppleScriptを書いてみました。実行すると、
表示されている各パレットを、
順次クローズしていきます。
当初、もっと簡単にできるものとばかり思って、window 1(実際にはパレット)にcloseコマンドを実行したものの、それでは実行できず……地道にクローズボタンを探してclickするという処理内容になりました。
もっとお手軽に書いてしまってもよかったものの、日本語環境でだけ動くScriptというのも、それはそれでいまひとつなので(別に自分は日本語環境でだけ動けばよいのですが)、言語環境に依存しないように書いておきました。
よく使いそうな部品なので、ライブラリ化して呼び出すとよいでしょう。
AppleScript名:指定アプリのパレットウィンドウを閉じる.scpt |
— – Created by: Takaaki Naganoya – Created on: 2024/06/26 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — set aRes to closeAllPallettes("Pages") of me on closeAllPallettes(appName) activate application appName delay 0.1 –this number depends of how fast the CPU (slower CPU require larger number. 0,1 for M1) tell application "System Events" tell process appName if (count (every window)) = 0 then return repeat tell window 1 set aSubrole to subrole if (aSubrole = "AXFloatingWindow") or (aSubrole = "AXSystemFloatingWindow") then try set bList to every button whose subrole = "AXCloseButton" set aButton to first item of bList tell aButton to click end try else exit repeat end if end tell end repeat end tell end tell return true end closeAllPallettes |
More from my site
(Visited 4 times, 4 visits today)