FolderItems リファレンス
FolderItem の集まり(コレクション)を表す FolderItems オブジェクトのリファレンスです。
記法: P=プロパティ、M=メソッド。
目次
1. 概要
選択中のアイテム、ドロップされたアイテム、履歴などに使われ、IDataObject としても動作するため、ドラッグ&ドロップやクリップボードにそのまま渡せます(api.OleSetClipboard(items)、api.DoDragDrop(items, ...) など)。
2. 取得方法
| 取得方法 | 返るもの |
|---|---|
FV.Items() / FV.SelectedItems() |
FolderItems(引数 true で SafeArray) |
FV.History |
FolderItems(履歴) |
te.FolderItems() |
空の FolderItems(te.FolderItems(dataObject) でIDataObjectから作成) |
api.DataObject() |
空の FolderItems(api.OleGetClipboard() の結果も FolderItems) |
| イベントの引数 | OnDrop の dataObj など |
3. メンバー
| 名前 | 種別 | 説明 |
|---|---|---|
Count / length |
P(読み) | アイテム数 |
Item(index) |
M | index(0始まり)の FolderItem を返す。Item(index, newItem) のように第2引数を渡すと、その位置を置き換える。Item(-1) は親フォルダ(共通の親、取得可能な場合)を返す。範囲外は空を返す |
AddItem(item) |
M | アイテムを末尾に追加する。item は FolderItem・パス文字列・IDList。パス文字列は FolderItem に変換して格納される |
_NewEnum |
P | 列挙用(Enumerator で使う) |
Index |
P | 現在位置(0始まり)。履歴(FV.History)では現在位置の指定に使う |
Application |
P(読み) | Shell.Application |
Parent |
P(読み) | 常に空 |
Data |
P | スクリプトが自由に保持できる値 |
4. ドラッグ&ドロップ/クリップボード関連
| 名前 | 種別 | 説明 |
|---|---|---|
dwEffect |
P | ドロップ効果の値(DROPEFFECT_*)。ドロップ操作の結果が入る |
pdwEffect |
P(読み) | dwEffect を指す Memory(DWORD)。api.DoDragDrop 等に渡す |
hDrop(x, y, fNC) |
P | CF_HDROP 形式の HDROP ハンドルを返す。x,y,fNC を指定するとドロップ位置(DROPFILES の pt/fNC)を設定した状態で返す(取得できなければ空) |
GetData() |
M | IDataObject のテキスト(CF_UNICODETEXT、なければ CF_TEXT)を返す。無ければ空 |
SetData(text) |
M | テキストを設定し、この FolderItems を「テキストを持つデータ」として扱う(UseText が true になる) |
UseText |
P | true のときテキストデータを優先して提供する |
5. 内部動作
- 生成元によって内部の形式が異なります。ビューから得たもの(
FV.Items()など)は元の列挙結果を、te.FolderItems()で作ったものは FolderItem の配列を、IDataObject から作ったものはIDListを保持します。AddItemやItem(index, newItem)の書き込みは、内部で配列形式に変換したうえで行われます。 Item(index)は、IDataObject 由来の場合に ItemIDList を再構築して FolderItem を返します(親フォルダとの合成)。
6. 使用例
// 選択項目のパスを取得
const items = FV.SelectedItems();
for (let i = 0; i < items.Count; i++) {
const item = items.Item(i);
const path = item.Path;
const isFolder = item.IsFolder;
}
// JavaScriptの配列風に取得
for (let i = 0; i < items.length; i++) {
const item = items[i];
const path = item.Path;
const isFolder = item.IsFolder;
}
// for...in で列挙
for (const item in FV.Items()) { /* ... */ }
// 独自の FolderItems を作ってビューで選択
const list = te.FolderItems();
list.AddItem("C:\\Windows\\notepad.exe");
list.AddItem("C:\\Windows\\explorer.exe");
FV.SelectItem(list, SVSI_SELECT | SVSI_DESELECTOTHERS);
// クリップボードにコピー
api.OleSetClipboard(list);