GUI Scriptingを(メニューやキーボードショートカットについては)ラッピングして、ファイル名に「アプリケーション名@メニュー項目名>メニュー項目」などと書くだけで該当するメニュー項目の実行を行える「Piyo Menu Clicker v1.0 for Stream Deck」のリリース候補版を試していたら、macOS 11.5+Keynote 11.1でエラーが出まくりました。
# その後の調査により、よりによってStream Deckの制御ソフトウェア「Stream Deck.app」が起動しているとこの問題が発生することがわかりました。Stream Deck用の制御Scriptを使おうとしたらStream Deckのソフトウェア自体が実行を邪魔していたとは….
メニューバーのメニュー項目を指し示そうとして、
AppleScript名:Keynoteで新規書類を実行.scpt |
activate application "Keynote" tell application "System Events" tell process "Keynote" click menu item 1 of menu 1 of menu bar item 3 of menu bar 1 end tell end tell |
のようなお気軽な内容を試してみたところ、エラーに。メニューが存在していて、GUI側からマウスで普通に操作できるのですが……
他のPagesであるとかSafariなどで同様の記述を行なってもエラーになりません。Keynoteだけ問題が発生しているようです。
AppleScript名:Pagesで新規書類を作成.scpt |
activate application "Pages" tell application "System Events" tell process "Pages" click menu item 1 of menu 1 of menu bar item 3 of menu bar 1 end tell end tell |
AppleScript名:Safariで新規ウィンドウを表示.scpt |
activate application "Safari" tell application "System Events" tell process "Safari" click menu item 1 of menu 1 of menu bar item 3 of menu bar 1 end tell end tell |
Keynoteのmenu bar 1に対してmenu bar itemのtitle(メニュー項目のテキスト)を求めると、「Apple」しか返ってきません。
tell application "System Events"
tell process "Keynote"
tell menu bar 1
set mList to title of every menu bar item
–> {"Apple"}
end tell
end tell
end tell
★Click Here to Open This Script
iOSアプリをM1 Mac上で起動した場合にこのような挙動になるのか調べてみても、ちゃんとiOSアプリもメニュー項目を取得できます。iOSアプリについては(苦労はするものの)AppleScriptから強引に操作することは可能なので、Keynoteよりは出来がいいといえます。
追記:
手元にあるバージョンの異なるmacOS環境でこの処理を試してみました。
macOS 12.0beta+Keynote v11.1→異常
macOS 11.5+Keynote v11.1→異常
macOS 10.15.7+Keynote v11.1→正常
macOS 10.14.6+Keynote v10.1→異常
macOS 10.13.6+Keynote v9.1→正常
追記2:
異常が出ていた環境では、すべてStream Deckの制御ソフトウェアをインストールして起動していました。Stream Deck.appを終了させると問題が発生しないことを確認しました。Stream Deck Softwareのせいでした。
Stream Deckから各種ソフトウェアを操作するために作ったソフトウェアが、Stream Deckソフトウェアによって実行を阻害されているという事実の前に言葉もありません。
elgatoのWebフォームからレポートを送っていますが、elgatoにはいろいろ送っても、一度も返事をもらったことがないのでなんとも(日本代理店のソフトバンクC&Sとは確認のためにやりとりしていますが…)。
厳密に言うと、Stream Deckのオンラインストアから入手可能な「Keynote」プラグイン(Keynoteのプレゼン再生コントロールを行うelgato製のプラグイン)をインストールするとGUI ScriptingのKeynoteに対する実行が阻害されます。
–> Elgato Keynote plugin checking demo
▲まさか、elgato純正のプラグインがKeynoteへのGUI Scriptingの実行(メニューへのアクセス)を妨害しているとは思いませんでした。このプラグインはインストールしてはいけないものだと思います。機能もたいしたことはないし、害悪でしかありません。即刻Storeから撤去してほしいものです
Dirk says:
The Code:
tell application "System Events"
tell process "Keynote"
click menu item 1 of menu 1 of menu bar item 3 of menu bar 1
end tell
end tell
works under macOS 11.5 and Keynote 11.1 on a German system without problems.
Takaaki Naganoya says:
Really? It may depends on each user’s language environment. My language environment is Japanese.
Dirk says:
Yes, no problem. The selection dialog for a new Keynote Presentation opens.
macOS 11.5.1
Keynote 11.1
MacBook Pro 16′ (2019) Intel
Takaaki Naganoya says:
tell application “Keynote” to activate
tell application “System Events”
tell process “Keynote”
tell menu bar 1
set mList to title of every menu bar item
–> {“Apple”}–Germany
end tell
end tell
end tell
I changed my language enviroment to Germany (de). This did not change the result on my macOS 11.5+Keynote v11.1 on M1 Mac mini.
Takaaki Naganoya says:
Hmm…..After quit Stream Deck.app, I can get every menu items…..All NG environment is installed Stream Deck software.