秀丸でCOMを操作する

いつの間にか秀丸のマクロでCOMを操作することができるようになっていたようです。これでなんでもできるようになりますね!
それは極端としてもいろいろできるようになります。例えばUNIXのduコマンドと同じようにフォルダのサイズを再帰的に表示しましょう。VBScriptならこうなります。

Dim fs, f

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(".")
du f

Sub du(f)
    WScript.Echo CStr(f.size) + " " + f.Path
    'すべてのサブフォルダを表示
    For Each subf In f.SubFolders
        du(subf)
    Next
End Sub

まず、オブジェクトを格納する変数は数値と同じように#を頭につけます。それから、WScript.CreateObjectの代わりにcreateobjectという関数が用意されています。

#fs = createobject("Scripting.FileSystemObject");

プロパティを参照したりメソッドを走らせるのにもそれぞれ関数が用意されています。しかし、それぞれ戻り値の型で関数が変わってきます。詳しくはヘルプ参照。
それだけでも面倒なんですが、それ以前に秀丸のマクロはバッチファイルに通じるめんどくささがあるんですよね。

openfile "";

#fs = createobject("Scripting.FileSystemObject");
#f = callmethod_returnobj(#fs, "GetFolder", ".");
call du #f;
endmacro;

du:
    ##f = ##1;
    ##size = getpropnum(##f, "size");
    $$path = getpropstr(##f, "Path");
    insert str(##size) + " " + $$path + "\n";
    
    ##SubFolders = getpropobj(##f, "SubFolders");
    ##counter = 0;
    while(1) {
        ##subf = getcollection(##SubFolders, 0);
        $$subfpath = getpropstr(##subf, "Path");
        if($$subfpath == "")
            break;
        call du ##subf;
    }
    return;