// Create a shell item array object that can be accessed using IObjectCollection // or IShellItemArray. IObjectCollection lets items be added or removed from the collection. // For code that needs to run on Vista use SHCreateShellItemArrayFromIDLists() HRESULT CreateShellItemArray(REFIID riid, void **ppv) { *ppv = NULL; IShellLibrary *pLibrary; HRESULT hr = CoCreateInstance(CLSID_ShellLibrary, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pLibrary)); if (SUCCEEDED(hr)) { hr = pLibrary->GetFolders(LFF_ALLITEMS, riid, ppv); pLibrary->Release(); } return hr; }
// @pymethod <o PyIShellItemArray>|PyIShellLibrary|GetFolders|Retrieves a collection of folders in the library PyObject *PyIShellLibrary::GetFolders(PyObject *self, PyObject *args) { IShellLibrary *pISL = GetI(self); if ( pISL == NULL ) return NULL; // @pyparm int|Filter|LFF_ALLITEMS|Specifies what types of folder to return (shellcon.LFF_*) // @pyparm <o PyIID>|riid|IID_IShellItemArray|The interface to return, IObjectCollection and IObjectArray also accepted. LIBRARYFOLDERFILTER Filter = LFF_ALLITEMS; IID riid = IID_IShellItemArray; void *pv; if ( !PyArg_ParseTuple(args, "|iO&:GetFolders", &Filter, PyWinObject_AsIID, &riid)) return NULL; HRESULT hr; PY_INTERFACE_PRECALL; hr = pISL->GetFolders(Filter, riid, &pv); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); return PyCom_PyObjectFromIUnknown((IUnknown *)pv, riid, FALSE); }