Enum リファレンス

COM のコレクション(FolderItems、Scripting.FileSystemObject の Drives、TabCtrl など)を順に列挙する Enum オブジェクトのリファレンスです。JScript の Enumerator に相当します。

記法: M=メソッド。メンバー名の照合は大文字小文字を区別しません。

目次

  1. 取得方法
  2. メソッド
  3. 列挙できるもの
  4. 注意点
  5. 使用例

1. 取得方法

api.CreateObject("Enum", collection)

const e = api.CreateObject("Enum", fso.Drives);

2. メソッド

名前 戻り値 説明
atEnd() bool 列挙が終了(または列挙不能)なら true
item() 値 現在の要素を返す。atEnd() が真のときは呼ばないこと(値は不定)
moveNext() なし 次の要素へ進む
moveFirst() なし 先頭に戻り、先頭の要素を取り出す

典型的なループは次の形です(Enumerator と同じです)。

for (const e = api.CreateObject("Enum", collection); !e.atEnd(); e.moveNext()) {
    const item = e.item();
}

3. 列挙できるもの

次の順に判定して、最初に成り立ったものを使います。

渡すオブジェクト 列挙される内容
IShellWindows(Shell.Application の Windows()) 開いているシェルウィンドウ
FolderItems(FV.Items()、FV.SelectedItems()、te.FolderItems() など) FolderItem
_NewEnum(DISPID_NEWENUM)を持つオブジェクト その列挙子が返す要素(fso.Drives、TabCtrl、Memory、WICBitmap 以外の多くの COM コレクション)
上記のいずれでもない IDispatchEx メンバー名(プロパティ名)を文字列として順に返す(for…in と同様)
上記のいずれでもない 何も列挙せず、atEnd() が最初から true

4. 注意点


5. 使用例

// ドライブを列挙(Scripting.FileSystemObject)
const fso = api.CreateObject("Scripting.FileSystemObject");
for (const e = api.CreateObject("Enum", fso.Drives); !e.atEnd(); e.moveNext()) {
    const drive = e.item();
    // drive.DriveLetter, drive.TotalSize ...
}

// FolderItems を列挙
const Items = FV.SelectedItems();
for (const e = api.CreateObject("Enum", Items); !e.atEnd(); e.moveNext()) {
    const path = e.item().Path;
}

// プロパティ名を列挙
const o = api.CreateObject("Object");
o.a = 1;
o.b = 2;
for (const e = api.CreateObject("Enum", o); !e.atEnd(); e.moveNext()) {
    const key = e.item();     // "a", "b"
}

// 非同期スクリプト(WebView2 側)
for (let list = await api.CreateObject("Enum", collection); !await list.atEnd(); await list.moveNext()) {
    const item = await list.item();
}

FolderItems の列挙は、通常は for...in や添字アクセスのほうが簡単です(FolderItems は Count と Item(i) で、TabCtrl も for...in で列挙できます)。Enum は、_NewEnum だけを提供する COM コレクションや、メンバー名の列挙に使います。

関連