You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
# 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)
 |