カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

IShellItem.BindToHandler関数のBHID_StorageEnumとBHID_EnumItemsの違い

IShellItem.BindToHandler関数の引数にBHID_StorageEnumとBHID_EnumItemsを指定した場合、以下の点が異なります。

BHID 概要
BHID_StorageEnum 作成されたIEnumShellItemsはファイルシステムオブジェクトのみ列挙する。
BHID_EnumItems 作成されたIEnumShellItemsはファイルシステムオブジェクトと特殊オブジェクトを列挙する。

実際の取得例を改変したものを下記に示します。斜線は環境により名前が異なるものです。なお、USB接続したスマートフォンはUSBストレージではなく、メーカーの提供するドライバにより特殊なフォルダとして扱われるものです。

BHID 出力例
BHID_StorageEnum Cドライブの名前 (C:)
Dドライブの名前 (D:)
BHID_EnumItems Cドライブの名前 (C:)
Dドライブの名前 (D:)
USB接続したスマートフォン
ダウンロード
3D オブジェクト
ピクチャ
ミュージック
デスクトップ
ドキュメント
ビデオ

C#によるサンプルプロジェクトのリポジトリ github.com