X-Finder プログラミング メモ |
|
1.IShellFolder2.MapColumnToSCID(iColumn, SHCOLUMNID); カラムの番号(iColumn)から SHCOLUMNID を取得します。 2.IShellFolder2.GetDetailsEx(pidlCHILD, SHCOLUMNID, VARIANT); SHCOLUMNID から VARIANT型でカラムの内容を取得します。 3.IPropertyUI.FormatForDisplay(fmtid, pid, PROPVARIANT, PUIFFDF_DEFAULT, pwszText, cchText); PROPVARIANT型 から 文字列型でカラムの内容を取得します。 ※MSDNではIPropertyUIは「Developers should use IPropertyDescription instead.」という事になっていますので、IPropertyDescription.FormatForDisplay か IPropertySystem.FormatForDisplay(Alloc) か API の PSFormatForDisplay(Alloc) を使用した方が良いと思います。ただ、どれも家のXP SP3では動作しないので、X-FinderではWindows2000から対応しているIPropertyUIを使用しています。 ※IPropertyUIの取得方法 CoCreateInstance(CLSID_PropertiesUI, NULL, CLSCTX_INPROC, IPropertyUI, ...); ※3のFormatForDisplayを使用しないとWin7/Vistaの場合、属性が数字になったりします。XPまではVARIANTの型で文字、数字、日付で場合分けすればほとんどOKだと思います。 ※VARIANT型からPROPVARIANT型を得るのに X-Finder では「TPropVariant(TVariantArg(VARIANT))」というキャストを用いています。もっと良い方法がありましたら教えてください。 ※Delphi6PersonalではIShellFolder2の定義が違ってMapColumnToSCIDではなくMapNameToSCIDとなっています。また、IIDも違うのでX-Finderでは別にIShellFolder2を定義しています。 |