#4679

Yutaka Emura
キーマスター

Aye Wongさんは書きました:
新しく追加されたwindowsオブジェクトを使って、すべてのEmEditorウィンドウで開かれている文書のファイル名を表示するスクリプトを書いてみたのですが、他のウィンドウグループ内で開かれた文書が表示されません。これはどうしてでしょうか?以下にコードを示します。

また、windowクラスは、V6までのシングルトンなグローバルオブジェクトであると同時にWin32 APIのウィンドウインスタンスへのハンドルを指しているようです。これは混乱を招くように思うのですが、意図したものでしょうか?透過的にClassNameをみて判断して扱うのが正しいのでしょうか?

wnds = new Enumerator( shell.windows );
for( ; !wnds .atEnd(); wnds.moveNext() ){
wnd = wnds.item();
if (wnd.ClassName == ClassName) {
docs = new Enumerator( wnd.editor.Documents );
for( ; !docs.atEnd(); docs.moveNext() ){
doc = docs.item();
alert( doc.Name );
}
}
}

残念ながら、他のグループのウィンドウの Window オブジェクトは取得できないようになっています。これは、異なるスレッド オブジェクトの取得は難しいためで、現在のマクロの制限になります。

後者のご質問についてですが、オブジェクトを省略してメソッドやプロパティだけを書いた場合には、現在のウィンドウのウィンドウ オブジェクトが暗黙に指定されていることになります。これは、マクロを書くときの負担を軽くするためと、以前のバージョンからの互換性を保つためです。これでご質問に答えているでしょうか? ClassNameをみて判断で問題はありませんが、前者のご質問の回答の通り、異なるグループについては、ドキュメントを取得することはできません。