# Sample implementation of IFileOperationProgressSink that just prints # some basic info import pythoncom from win32com.shell import shell, shellcon from win32com.server.policy import DesignatedWrapPolicy class FileOperationProgressSink(DesignatedWrapPolicy): _com_interfaces_ = [shell.IID_IFileOperationProgressSink] _public_methods_ = [ "StartOperations", "FinishOperations", "PreRenameItem", "PostRenameItem", "PreMoveItem", "PostMoveItem", "PreCopyItem", "PostCopyItem", "PreDeleteItem", "PostDeleteItem", "PreNewItem", "PostNewItem", "UpdateProgress", "ResetTimer", "PauseTimer", "ResumeTimer", ] def __init__(self): self._wrap_(self) self.newItem = None def PreDeleteItem(self, flags, item): # Can detect cases where to stop via flags and condition below, however the operation # does not actual stop, we can resort to raising an exception as that does stop things # but that may need some additional considerations before implementing. return 0 if flags & shellcon.TSF_DELETE_RECYCLE_IF_POSSIBLE else 0x80004005 # S_OK, or E_FAIL def PostDeleteItem(self, flags, item, hr_delete, newly_created): if newly_created: self.newItem = newly_created.GetDisplayName(shellcon.SHGDN_FORPARSING) def create_sink(): return pythoncom.WrapObject(FileOperationProgressSink(), shell.IID_IFileOperationProgressSink)