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);
+}
|