// @pymethod interface|PyIShellItem|BindToHandler|Creates an instance of one of the item's handlers PyObject *PyIShellItem::BindToHandler(PyObject *self, PyObject *args) { IShellItem *pISI = GetI(self); if ( pISI == NULL ) return NULL; // @pyparm <o PyIBindCtx>|pbc||Used to pass parameters that influence the binding operation, can be None // @pyparm <o PyIID>|bhid||GUID that identifies a handler (shell.BHID_*) // @pyparm <o PyIID>|riid||The interface to return PyObject *obpbc; PyObject *obbhid; PyObject *obriid; IBindCtx *pbc; IID bhid; IID riid; void *pv; if ( !PyArg_ParseTuple(args, "OOO:BindToHandler", &obpbc, &obbhid, &obriid) ) return NULL; if (!PyWinObject_AsIID(obbhid, &bhid)) return NULL; if (!PyWinObject_AsIID(obriid, &riid)) return NULL; if (!PyCom_InterfaceFromPyInstanceOrObject(obpbc, IID_IBindCtx, (void **)&pbc, TRUE /* bNoneOK */)) return NULL; HRESULT hr; PY_INTERFACE_PRECALL; hr = pISI->BindToHandler( pbc, bhid, riid, &pv ); if (pbc) pbc->Release(); PY_INTERFACE_POSTCALL; if ( FAILED(hr) ) return PyCom_BuildPyException(hr, pISI, IID_IShellItem ); return PyCom_PyObjectFromIUnknown((IUnknown *)pv, riid, FALSE); }
HRESULT PreviewGenerator::ShowPreviewWithThumbnailProvider(CString filePath, CLSID clsID) { HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); int nSize = 256; HBITMAP g_hThumbnail; IShellItem *psi; hr = SHCreateItemFromParsingName(filePath, NULL, IID_PPV_ARGS(&psi)); if (hr == S_OK) { IThumbnailProvider *pThumbProvider; hr = psi->BindToHandler(NULL, clsID, IID_PPV_ARGS(&pThumbProvider)); if (hr == S_OK) { WTS_ALPHATYPE wtsAlpha; hr = pThumbProvider->GetThumbnail(nSize, &g_hThumbnail, &wtsAlpha); } else { } } return hr; }