*この記事はTerribleJunkShowによる独自研究です。
Window.childrenの本来の使い方
Window という設計図をもとに、
var myW = new Window(…)と書いて新規ウインドウを作ります。
その後、ボタンなどを追加するために
myW.add(“button”…)などと書きます。
Window.childrenは作ったウインドウが持つ子供たちという意味で、
myW.childrenと書けば、作ったウインドウのボタンなどが得られます。
しかし、Window.childrenには上記以外の意味があるようです。
Window.childrenの別の意味
どうやら、作ったウインドウ自体、つまりAEに読み込んだスクリプトウインドウやUIパネルが
Window.childrenに入っているようです。
スクリプトウインドウやパネルを作ると、設計図のほうのWindowのchildrenに入る、という意味です。
そこから特定のスクリプト名やボタン名でfor文検索をかければ、該当スクリプトのボタンが見つかります。
(ボタンだけでなく、あらゆる種類のUIパーツが検索可能です)
そのボタンにonClickやclickイベントを適用すれば、該当スクリプトのボタンの遠隔操作が可能となります。
注意点は、
UIパネルはWorkspaceというオブジェクトが挟まっていること、
そしてどうやら instanceof Workspace と書くと「未定義です」というエラーが出ることがあること、
おそらく一度消したスクリプトウインドウは、ボタンに紐づけられた関数コードがメモリから消えていることです。
詳しくは私の作ったスクリプトBtnHookのソースコードを見ていただければと思います。
注意点(最重要)
有償スクリプトを作っている作者のうち、ライセンス認証、トライアル版のシステムを自作している方へ
ライセンス認証が通らなかったり、トライアルの期限が過ぎたときに「ボタン類は表示させているが別パネルなどで覆って無効にしている」などの実装をしていた場合は、ご注意ください。
ボタン類が表示されているならば、上記の方法で遠隔操作できてしまいます。「表示をしない」つまり「認証が通らなかったらウインドウを作成しない」という実装に変えたほうがよいかもしれません。