[pywin32-checkins] /hgroot/pywin32/pywin32: Add IShellLibrary to win32com.shell
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: <pyw...@li...> - 2012-09-30 21:39:37
|
changeset 789a2c39b4fa in /hgroot/pywin32/pywin32 details: http://pywin32.hg.sourceforge.net/hgweb/pywin32/pywin32/hgroot/pywin32/pywin32?cmd=changeset;node=789a2c39b4fa summary: Add IShellLibrary to win32com.shell diffstat: CHANGES.txt | 3 +- com/win32comext/shell/shellcon.py | 20 + com/win32comext/shell/src/PyIShellLibrary.cpp | 475 ++++++++++++++++++++++++++ com/win32comext/shell/src/PyIShellLibrary.h | 41 ++ com/win32comext/shell/src/shell.cpp | 46 ++- setup.py | 1 + 6 files changed, 581 insertions(+), 5 deletions(-) diffs (truncated from 657 to 300 lines): diff -r 7b2f5cfd84bd -r 789a2c39b4fa CHANGES.txt --- a/CHANGES.txt Sat Sep 29 17:03:38 2012 -0400 +++ b/CHANGES.txt Sun Sep 30 17:38:34 2012 -0400 @@ -37,7 +37,8 @@ * win32com.shell - added function SHCreateStreamOnFileEx and interfaces IShellItem2, IEnumShellItems, IApplicationDocumentLists, IApplicationDestinations, ITaskbarList, IEnumObjects, - IKnownFolder, and IKnownFolderManager + IKnownFolder, IKnownFolderManager, IObjectArray, IObjectCollection, + ICustomDestinationList, and IShellLibrary * win32com.propsys - Many Property System interfaces and functions added diff -r 7b2f5cfd84bd -r 789a2c39b4fa com/win32comext/shell/shellcon.py --- a/com/win32comext/shell/shellcon.py Sat Sep 29 17:03:38 2012 -0400 +++ b/com/win32comext/shell/shellcon.py Sun Sep 30 17:38:34 2012 -0400 @@ -1334,3 +1334,23 @@ ## KNOWNDESTCATEGORY used with ICustomDestinationList.AppendKnownCategory KDC_FREQUENT = 1 KDC_RECENT = 2 + +## LIBRARYFOLDERFILTER used with IShellLibrary.GetFolders +LFF_FORCEFILESYSTEM = 1 +LFF_STORAGEITEMS = 2 +LFF_ALLITEMS = 3 + +## DEFAULTSAVEFOLDERTYPE used with IShellLibrary.Get/SetDefaultSaveFolder +DSFT_DETECT = 1 +DSFT_PRIVATE = 2 +DSFT_PUBLIC = 3 + +## LIBRARYOPTIONFLAGS used with IShellLibrary.Get/SetOptions +LOF_DEFAULT = 0 +LOF_PINNEDTONAVPANE = 1 +LOF_MASK_ALL = 1 + +## LIBRARYSAVEFLAGS Used with PyIShellLibrary.Save +LSF_FAILIFTHERE = 0 +LSF_OVERRIDEEXISTING = 1 +LSF_MAKEUNIQUENAME = 2 diff -r 7b2f5cfd84bd -r 789a2c39b4fa com/win32comext/shell/src/PyIShellLibrary.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/com/win32comext/shell/src/PyIShellLibrary.cpp Sun Sep 30 17:38:34 2012 -0400 @@ -0,0 +1,475 @@ +// This file implements the IShellLibrary Interface for Python. +// Generated by makegw.py + +#include "shell_pch.h" + +// Requires Windows 7 SDK to build +#if WINVER >= 0x0601 + +#include "PyIShellLibrary.h" + +// @doc - This file contains autoduck documentation +// --------------------------------------------------- +// +// Interface Implementation + +PyIShellLibrary::PyIShellLibrary(IUnknown *pdisp): + PyIUnknown(pdisp) +{ + ob_type = &type; +} + +PyIShellLibrary::~PyIShellLibrary() +{ +} + +/* static */ IShellLibrary *PyIShellLibrary::GetI(PyObject *self) +{ + return (IShellLibrary *)PyIUnknown::GetI(self); +} + +// @pymethod |PyIShellLibrary|LoadLibraryFromItem|Loads an existing library file +PyObject *PyIShellLibrary::LoadLibraryFromItem(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + IShellItem *Library; + PyObject *obLibrary; + DWORD Mode; + // @pyparm <o PyIShellItem>|Library||Shell item interface representing the library file + // @pyparm int|Mode||Access mode, combination of storagecon.STGM_* flags + if ( !PyArg_ParseTuple(args, "Ok:LoadLibraryFromItem", &obLibrary, &Mode) ) + return NULL; + if (!PyCom_InterfaceFromPyObject(obLibrary, IID_IShellItem, (void **)&Library, FALSE)) + return NULL; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->LoadLibraryFromItem(Library, Mode); + Library->Release(); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + Py_INCREF(Py_None); + return Py_None; +} + +// @pymethod |PyIShellLibrary|LoadLibraryFromKnownFolder|Initializes library from a known folder +PyObject *PyIShellLibrary::LoadLibraryFromKnownFolder(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + IID Library; + DWORD Mode; + // @pyparm <o PyIID>|Library||Known folder id, shell.FOLDERID_* + // @pyparm int|Mode||Access mode, combination of storagecon.STGM_* flags + if ( !PyArg_ParseTuple(args, "O&k:LoadLibraryFromKnownFolder", + PyWinObject_AsIID, &Library, &Mode)) + return NULL; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->LoadLibraryFromKnownFolder(Library, Mode); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + Py_INCREF(Py_None); + return Py_None; +} + +// @pymethod |PyIShellLibrary|AddFolder|Includes a folder +PyObject *PyIShellLibrary::AddFolder(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + IShellItem *Location; + PyObject *obLocation; + // @pyparm <o PyIShellItem>|Location||Shell item interface representing the folder + if ( !PyArg_ParseTuple(args, "O:AddFolder", &obLocation)) + return NULL; + if (!PyCom_InterfaceFromPyObject(obLocation, IID_IShellItem, (void **)&Location, FALSE)) + return NULL; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->AddFolder(Location); + Location->Release(); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + Py_INCREF(Py_None); + return Py_None; + +} + +// @pymethod |PyIShellLibrary|RemoveFolder|Removes a folder +PyObject *PyIShellLibrary::RemoveFolder(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + IShellItem *Location; + PyObject *obLocation; + // @pyparm <o PyIShellItem>|Location||Shell item interface representing the folder + if ( !PyArg_ParseTuple(args, "O:RemoveFolder", &obLocation)) + return NULL; + if (!PyCom_InterfaceFromPyObject(obLocation, IID_IShellItem, (void **)&Location, FALSE)) + return NULL; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->RemoveFolder(Location); + Location->Release(); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + Py_INCREF(Py_None); + return Py_None; +} + +// @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); +} + +// @pymethod <o PyIShellItem>|PyIShellLibrary|ResolveFolder|Attempts to locate a folder that has been moved or renamed +PyObject *PyIShellLibrary::ResolveFolder(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + IShellItem *FolderToResolve; + PyObject *obFolderToResolve; + DWORD Timeout; + IID riid = IID_IShellItem; + // @pyparm <o PyIShellItem>|FolderToResolve||Library item whose location has changed + // @pyparm int|Timeout||Max search time, specified in milliseconds + // @pyparm <o PyIID>|riid|IID_IShellItem|The interface to return + if (!PyArg_ParseTuple(args, "Ok|O&:ResolveFolder", + &obFolderToResolve, &Timeout, + PyWinObject_AsIID, &riid)) + return NULL; + if (!PyCom_InterfaceFromPyObject(obFolderToResolve, IID_IShellItem, (void **)&FolderToResolve, FALSE)) + return NULL; + + void *pv; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->ResolveFolder(FolderToResolve, Timeout, riid, &pv ); + FolderToResolve->Release(); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + return PyCom_PyObjectFromIUnknown((IUnknown *)pv, riid, FALSE); +} + +// @pymethod <o PyIShellItem>|PyIShellLibrary|GetDefaultSaveFolder|Returns the default folder in which new items are saved +PyObject *PyIShellLibrary::GetDefaultSaveFolder(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + DEFAULTSAVEFOLDERTYPE Type = DSFT_DETECT; + IID riid = IID_IShellItem; + // @pyparm int|Type|DSFT_DETECT|Specifies whether to return public or private save location, shellcon.DSFT_* + // @pyparm <o PyIID>|riid|IID_IShellItem|The interface to return + if ( !PyArg_ParseTuple(args, "|iO&:GetDefaultSaveFolder", &Type, PyWinObject_AsIID, &riid)) + return NULL; + + void *pv; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->GetDefaultSaveFolder(Type, riid, &pv); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + return PyCom_PyObjectFromIUnknown((IUnknown *)pv, riid, FALSE); +} + +// @pymethod |PyIShellLibrary|SetDefaultSaveFolder|Sets the default save location +PyObject *PyIShellLibrary::SetDefaultSaveFolder(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + DEFAULTSAVEFOLDERTYPE Type; + IShellItem *SaveFolder; + PyObject *obSaveFolder; + // @pyparm int|Type||Specifies public or private save location, shellcon.DSFT_* + // @pyparm <o PyIShellItem>|SaveFolder||New default location, must be in the library + if (!PyArg_ParseTuple(args, "iO:SetDefaultSaveFolder", &Type, &obSaveFolder)) + return NULL; + if (!PyCom_InterfaceFromPyObject(obSaveFolder, IID_IShellItem, (void **)&SaveFolder, FALSE)) + return NULL; + + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->SetDefaultSaveFolder(Type, SaveFolder); + SaveFolder->Release(); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + Py_INCREF(Py_None); + return Py_None; +} + +// @pymethod int|PyIShellLibrary|GetOptions|Retrieves library option flags +// @rdesc Returns a combination of shellcon.LOF_* flags +PyObject *PyIShellLibrary::GetOptions(PyObject *self, PyObject *args) +{ + IShellLibrary *pISL = GetI(self); + if ( pISL == NULL ) + return NULL; + LIBRARYOPTIONFLAGS Options; + HRESULT hr; + PY_INTERFACE_PRECALL; + hr = pISL->GetOptions(&Options); + PY_INTERFACE_POSTCALL; + + if ( FAILED(hr) ) + return PyCom_BuildPyException(hr, pISL, IID_IShellLibrary ); + return PyInt_FromLong(Options); +} |