IShellFolderView
COM公式ドキュメント
シェルフォルダービューを操作するメソッドを公開します。
解説(Remarks)
IShellFolderView は、SHCreateShellFolderViewEx から返される IShellView オブジェクトによってサポートされます。このオブジェクトには ListView コントロールが含まれており、IShellFolderView のメソッドの一部はこの ListView コントロールを直接操作します。
メソッド 28
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Rearrange は変更されるか利用できなくなる可能性があります。
| lParamSort | LPARAM | in | 再配置をどのように実行するかを指定します。 lParamSort の下位 16 ビットは並べ替え規則を定義します。ほとんどのアプリケーションは並べ替え規則を既定値のゼロに設定し、項目を名前で並べ替えることを示します。システムはこれ以外の並べ替え規則を定義していません。一部のフォルダーオブジェクトでは、呼び出し側アプリケーションが lParamSort の下位 16 ビットを使用してフォルダー固有の並べ替え規則を指定できる場合があります。規則とそれに関連付けられた lParamSort の値は、フォルダーによって定義されます。 システムフォルダービューオブジェクトが IShellFolderView::Rearrange を呼び出すとき、lParamSort の下位 16 ビットは配置に使用する列を指定するために使用されます。 lParamSort の上位 16 ビットは、並べ替え規則を変更するフラグに使用されます。システムは現在、次の修飾フラグを定義しています。 SHCIDS_ALLFIELDSバージョン 5.0。表示名だけでなく、ITEMIDLIST 構造体に含まれるすべての情報を配置します。このフラグは、IShellFolder2 インターフェイスをサポートするフォルダーオブジェクトに対してのみ有効です。たとえば 2 つの項目がファイルの場合、フォルダーはそれらの名前、サイズ、ファイル時刻、属性、および構造体内のその他の情報を配置します。このフラグが設定されている場合、lParamSort の下位 16 ビットはゼロでなければなりません。 SHCIDS_CANONICALONLYバージョン 5.0。名前で配置する場合、表示名ではなくシステム名を配置します。このフラグが渡されると、シェルフォルダーが一貫した並べ替え関数を実装している限り、フォルダーが最も効率的と判断した基準で 2 つの項目が配置されます。このフラグは他のフラグと組み合わせることはできません。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
呼び出し側アプリケーションへの注意
フォルダーオブジェクトが IShellFolder2 をサポートしていない場合は、lParamSort に SHCIDS_ALLFIELDS フラグを設定しないでください。設定すると予測不能な結果になる可能性があります。SHCIDS_ALLFIELDS フラグを使用する場合は、lParamSort の下位 16 ビットをゼロに設定する必要があります。実装者への注意
並べ替え規則を抽出するには、ビット単位の AND 演算子 (&) を使用して lParamSort を SHCIDS_COLUMNMASK (0X0000FFFF) と組み合わせます。この演算により、SHCIDS_ALLFIELDS 値を含む lParamSort の上位 16 ビットがマスクされます。ビューの配置パラメーター、すなわちビューがどのように並べ替えられているかを取得します。
| plParamSort | LPARAM* | out | plParamSort の下位 16 ビットは並べ替え規則を定義します。ほとんどのアプリケーションは並べ替え規則を既定値のゼロに設定し、項目を名前で並べ替えることを示します。システムはこれ以外の並べ替え規則を定義していません。一部のフォルダーオブジェクトでは、呼び出し側アプリケーションが plParamSort の下位 16 ビットを使用してフォルダー固有の並べ替え規則を指定できる場合があります。規則とそれに関連付けられた plParamSort の値は、フォルダーによって定義されます。 システムフォルダービューオブジェクトが IShellFolderView::GetArrangeParam を呼び出すとき、plParamSort の下位 16 ビットは配置に使用する列を指定するために使用されます。 plParamSort の上位 16 ビットは、並べ替え規則を変更するフラグに使用されます。システムは現在、次の修飾フラグを定義しています。 SHCIDS_ALLFIELDSバージョン 5.0。表示名だけでなく、ITEMIDLIST 構造体に含まれるすべての情報を配置します。このフラグは、IShellFolder2 インターフェイスをサポートするフォルダーオブジェクトに対してのみ有効です。たとえば 2 つの項目がファイルの場合、フォルダーはそれらの名前、サイズ、ファイル時刻、属性、および構造体内のその他の情報を配置します。このフラグが設定されている場合、plParamSort の下位 16 ビットはゼロでなければなりません。 SHCIDS_CANONICALONLYバージョン 5.0。名前で配置する場合、表示名ではなくシステム名を配置します。このフラグが渡されると、シェルフォルダーが一貫した並べ替え関数を実装している限り、フォルダーが最も効率的と判断した基準で 2 つの項目が配置されます。このフラグは他のフラグと組み合わせることはできません。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
移動されたアイコンを、目に見えないグリッドに整列するように配置します。
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、Windows XP のエクスプローラーで 表示 | アイコンの整列 | グリッド線に合わせる を選択するのと同じ効果があり、また Windows XP または Windows Vista でデスクトップを右クリックして アイコンの整列 | グリッド線に合わせる を選択するのと同じ効果があります。
AutoArrange は変更されるか利用できなくなる可能性があります。
戻り値
解説(Remarks)
このメソッドは、Windows XP のエクスプローラーで 表示 | アイコンの整列 | 自動整列 を選択するのと同じ効果があり、また Windows XP または Windows Vista でデスクトップを右クリックして アイコンの整列 | 自動整列 を選択するのと同じ効果があります。
GetAutoArrange は変更されるか利用できなくなる可能性があります。
戻り値
型: HRESULT
フォルダーが自動整列モードの場合は S_OK を返します。
AddObject は変更されるか利用できなくなる可能性があります。
| pidl | ITEMIDLIST* | in | ビューに追加する項目を指定する ItemID へのポインター。 |
| puItem | DWORD* | out | このメソッドが正常に返されたときに、追加された項目のインデックス位置を受け取る値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このインデックスを指定してすぐに IShellFolderView::GetObject を呼び出すと、追加した ITEMID_CHILD のコピーが取得されます。ただし、項目のインデックス位置は時間の経過とともに変化する可能性があるため、特定のインデックスが常に同じ ITEMID_CHILD を返すことをコードで前提にすることはできません。
このメソッドを通じて追加された項目は、データソースによっていつでもビューから削除される可能性があります。
ビューから項目を取得します。
| ppidl | ITEMIDLIST** | out | このメソッドが返されたときに、指定されたインデックスにある項目へのポインターのアドレスを格納します。 |
| uItem | DWORD | in | 取得するビュー内の項目のインデックス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
RemoveObject は変更されるか利用できなくなる可能性があります。
| pidl | ITEMIDLIST* | inoptional | ビューから削除する項目へのポインター。この値は NULL にできます。Windows XP および Windows Vista でシステムフォルダービューオブジェクト (DefView) を使用する場合、NULL 値はビューからのすべてのオブジェクトの削除をもたらします。 |
| puItem | DWORD* | out | このメソッドが返されたときに、削除された項目のインデックス位置へのポインターを格納します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを通じて削除された項目は、データソースによっていつでもビューに再追加される可能性があります。
フォルダービュー内の項目の数を取得します。
| puCount | DWORD* | out | このメソッドが返されたときに、フォルダービューに表示されている項目の数へのポインターを格納します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
SetObjectCount は現在利用できません。
| uCount | DWORD | in | ListView コントロールに設定する項目の数。 |
| dwFlags | DWORD | in | 項目数が設定されたときの ListView コントロールの動作を制御するフラグ。以下を含みます。 SFVSOC_INVALIDATE_ALL (0x00000001)影響を受ける項目が現在ビューに表示されていない限り、ListView コントロールは再描画されません。これが既定値です。 SFVSOC_NOSCROLL (LVSICF_NOSCROLL)項目数が変更されても、ListView コントロールはスクロール位置を変更しません。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合はエラー値を返します。Windows Vista 以降では、SetObjectCount の呼び出しは常に E_NOTIMPL を返します。
解説(Remarks)
このメソッドは、ビューに含まれる ListView コントロールに、WPARAM を uCount、LPARAM を dwFlags に等しく設定して LVM_SETITEMCOUNT を送信します。
UpdateObject は変更されるか利用できなくなる可能性があります。
| pidlOld | ITEMIDLIST* | in | 元の項目。 |
| pidlNew | ITEMIDLIST* | in | 新しい項目。 |
| puItem | DWORD* | out | このメソッドが返されたときに、置き換えられた項目のインデックスへのポインターを格納します。この値を使用して後で IShellFolderView::GetObject を呼び出し、追加した PITEMID_CHILD を取得できます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
puItem によって返されたインデックスを指定してすぐに IShellFolderView::GetObject を呼び出すと、追加した ITEMID_CHILD のコピーが取得されます。ただし、項目のインデックス位置は時間の経過とともに変化する可能性があるため、特定のインデックスが常に同じ ITEMID_CHILD を返すことをコードで前提にすることはできません。
このメソッドを通じて行われた変更は、データソースによっていつでもビュー内で破棄される可能性があります。
RefreshObject は変更されるか利用できなくなる可能性があります。
| pidl | ITEMIDLIST* | in | 再描画する項目。 |
| puItem | DWORD* | out | このメソッドが正常に返されたときに、再描画された項目のインデックスを受け取る値へのポインター。この値を使用して IShellFolderView::GetObject を呼び出し、再描画した PITEMID_CHILD を取得できます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
puItem によって返されたインデックスを指定してすぐに IShellFolderView::GetObject を呼び出すと、再描画した ITEMID_CHILD のコピーが取得されます。ただし、項目のインデックス位置は時間の経過とともに変化する可能性があるため、特定のインデックスが常に同じ ITEMID_CHILD を返すことをコードで前提にすることはできません。
ビューの再描画を許可するか、または再描画を禁止します。
| bRedraw | BOOL | in | 変更後に内容を再描画できる場合は TRUE、変更後に内容を再描画できない場合は FALSE。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、ビューに含まれる ListView オブジェクトに WM_SETREDRAW メッセージを送信します。
ビュー内で選択されている項目の数を取得します。
| puSelected | DWORD* | out | このメソッドが正常に返されたときに、ビュー内で選択されている項目の数を受け取る値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ビュー内で選択されているオブジェクトの配列と、それらのオブジェクトの数を取得します。
| pppidl | ITEMIDLIST*** | out | このメソッドが正常に返されたときに、ビュー内で現在選択されている項目の配列を指すポインターのアドレス。呼び出し側アプリケーションは、LocalFree を使用して pppidl の配列を解放することが期待されます。呼び出し側アプリケーションは、配列に含まれる個々の項目を解放してはなりません。 |
| puItems | DWORD* | out | このメソッドが正常に返されたときに、pppidl 配列内の項目の数を受け取る値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、内部データ構造への定数ポインターを提供します。呼び出し側アプリケーションは、それらを直ちに処理し、キャッシュしないことが期待されます。
現在のドラッグアンドドロップ操作またはカットアンドペースト操作の宛先がソースと同じかどうかを確認します。
| pDropTarget | IDropTarget* | inoptional | 宛先のドロップターゲットオブジェクトへのポインター。 |
戻り値
型: HRESULT
宛先がソースと同じ場合は S_OK を返します。
現在のドラッグアンドドロップ操作が開始された地点を取得します。
| ppt | POINT* | out | このメソッドが正常に返されたときに、現在のドラッグアンドドロップ操作が開始された座標を受け取る構造体へのポインター。 |
戻り値
現在のドラッグアンドドロップ操作が終了した地点を取得します。
| ppt | POINT* | out | このメソッドが正常に返されたときに、現在のドラッグアンドドロップ操作が終了した座標を受け取る構造体へのポインター。 |
戻り値
このメソッドは実装されていません。(IShellFolderView.MoveIcons)
| pDataObject | IDataObject* | in |
戻り値
型: HRESULT
このメソッドは実装されていません。
指定された項目の位置を設定します。
| pidl | ITEMIDLIST* | in | 位置を設定する対象の項目に対応する PIDL。 |
| ppt | POINT* | in | ビューに含まれる ListView を基準とした項目の新しい座標を含む構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IsBkDropTarget は変更されるか利用できなくなる可能性があります。
| pDropTarget | IDropTarget* | inoptional | ドラッグアンドドロップ操作のターゲットへのポインター。 |
戻り値
SetClipboard は変更されるか利用できなくなる可能性があります。
| bMove | BOOL | in | TRUE でなければなりません。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
SetPoints は変更されるか利用できなくなる可能性があります。
| pDataObject | IDataObject* | in | データオブジェクトへのポインター。このデータオブジェクトには、現在の選択の位置座標が含まれています。これらの座標は、ビューに含まれる ListView コントロールを基準として与えられます。これらの座標は、ドラッグアンドドロップ操作の終了時にオブジェクトを配置するために使用できます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ドラッグアンドドロップ操作が IShellView によって開始された場合、この呼び出しは必要ありません。
小および大のビューモードに限り、間隔を取得します。
| pSpacing | ITEMSPACING* | out | このメソッドが正常に返されたときに、ビューモードの間隔を記述する情報を受け取る構造体へのポインター。 |
戻り値
解説(Remarks)
このメソッドは、ビューモードの間隔を取得するために LVM_GETITEMSPACING メッセージを送信します。
このメソッドは、大および小のビューモードの間隔のみを取得します。
Windows Vista 以降では、このメソッドは ITEMSPACING 構造体で返される両方の値のペアに、小のビューモードの間隔を格納します。
IShellFolderView::SetCallback は変更されるか利用できなくなる可能性があります。
| pNewCB | IShellFolderViewCB* | inoptional | 新しい IShellFolderViewCB コールバックオブジェクトへのポインター。 |
| ppOldCB | IShellFolderViewCB** | out | このメソッドが正常に返されたときに、元の IShellFolderViewCB オブジェクトを指すインターフェイスポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
IShellFolderView::Select は変更されるか利用できなくなる可能性があります。
| dwFlags | DWORD | in | ビュー内のどの項目を選択するか (もしあれば) を決定します。次の値のいずれか。 SFVS_SELECT_NONE (0x0)ビュー内のすべての項目の選択を解除します。 SFVS_SELECT_ALLITEMS (0x1)ビュー内のすべての項目を選択します。 SFVS_SELECT_INVERT (0x2)選択されていないすべての項目を選択し、選択されているすべての項目の選択を解除します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
QuerySupport は変更されるか利用できなくなる可能性があります。
| pdwSupport | DWORD* | inout | 予約済み。NULL でなければなりません。 |
戻り値
IShellView の内部オートメーションオブジェクトを置き換えます。
| pdisp | IDispatch* | inoptional | 新しいオートメーションオブジェクトへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellFolderView "{37A378C0-F82D-11CE-AE65-08002B2E1262}" #usecom global IShellFolderView IID_IShellFolderView "{62112AA1-EBE4-11CF-A5FB-0020AFE7292D}" #comfunc global IShellFolderView_Rearrange 3 sptr #comfunc global IShellFolderView_GetArrangeParam 4 var #comfunc global IShellFolderView_ArrangeGrid 5 #comfunc global IShellFolderView_AutoArrange 6 #comfunc global IShellFolderView_GetAutoArrange 7 #comfunc global IShellFolderView_AddObject 8 var,var #comfunc global IShellFolderView_GetObject 9 var,int #comfunc global IShellFolderView_RemoveObject 10 var,var #comfunc global IShellFolderView_GetObjectCount 11 var #comfunc global IShellFolderView_SetObjectCount 12 int,int #comfunc global IShellFolderView_UpdateObject 13 var,var,var #comfunc global IShellFolderView_RefreshObject 14 var,var #comfunc global IShellFolderView_SetRedraw 15 int #comfunc global IShellFolderView_GetSelectedCount 16 var #comfunc global IShellFolderView_GetSelectedObjects 17 var,var #comfunc global IShellFolderView_IsDropOnSource 18 sptr #comfunc global IShellFolderView_GetDragPoint 19 var #comfunc global IShellFolderView_GetDropPoint 20 var #comfunc global IShellFolderView_MoveIcons 21 sptr #comfunc global IShellFolderView_SetItemPos 22 var,var #comfunc global IShellFolderView_IsBkDropTarget 23 sptr #comfunc global IShellFolderView_SetClipboard 24 int #comfunc global IShellFolderView_SetPoints 25 sptr #comfunc global IShellFolderView_GetItemSpacing 26 var #comfunc global IShellFolderView_SetCallback 27 sptr,sptr #comfunc global IShellFolderView_Select 28 int #comfunc global IShellFolderView_QuerySupport 29 var #comfunc global IShellFolderView_SetAutomationObject 30 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IShellFolderView "{37A378C0-F82D-11CE-AE65-08002B2E1262}" #usecom global IShellFolderView IID_IShellFolderView "{62112AA1-EBE4-11CF-A5FB-0020AFE7292D}" #comfunc global IShellFolderView_Rearrange 3 sptr #comfunc global IShellFolderView_GetArrangeParam 4 sptr #comfunc global IShellFolderView_ArrangeGrid 5 #comfunc global IShellFolderView_AutoArrange 6 #comfunc global IShellFolderView_GetAutoArrange 7 #comfunc global IShellFolderView_AddObject 8 sptr,sptr #comfunc global IShellFolderView_GetObject 9 sptr,int #comfunc global IShellFolderView_RemoveObject 10 sptr,sptr #comfunc global IShellFolderView_GetObjectCount 11 sptr #comfunc global IShellFolderView_SetObjectCount 12 int,int #comfunc global IShellFolderView_UpdateObject 13 sptr,sptr,sptr #comfunc global IShellFolderView_RefreshObject 14 sptr,sptr #comfunc global IShellFolderView_SetRedraw 15 int #comfunc global IShellFolderView_GetSelectedCount 16 sptr #comfunc global IShellFolderView_GetSelectedObjects 17 sptr,sptr #comfunc global IShellFolderView_IsDropOnSource 18 sptr #comfunc global IShellFolderView_GetDragPoint 19 sptr #comfunc global IShellFolderView_GetDropPoint 20 sptr #comfunc global IShellFolderView_MoveIcons 21 sptr #comfunc global IShellFolderView_SetItemPos 22 sptr,sptr #comfunc global IShellFolderView_IsBkDropTarget 23 sptr #comfunc global IShellFolderView_SetClipboard 24 int #comfunc global IShellFolderView_SetPoints 25 sptr #comfunc global IShellFolderView_GetItemSpacing 26 sptr #comfunc global IShellFolderView_SetCallback 27 sptr,sptr #comfunc global IShellFolderView_Select 28 int #comfunc global IShellFolderView_QuerySupport 29 sptr #comfunc global IShellFolderView_SetAutomationObject 30 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。