123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- # Sample implementation of IFileOperationProgressSink that just prints
- # some basic info
- import pythoncom
- from win32com.shell import shell, shellcon
- from win32com.server.policy import DesignatedWrapPolicy
- tsf_flags = list((k,v) for k,v in list(shellcon.__dict__.items()) if k.startswith('TSF_'))
- def decode_flags(flags):
- if flags == 0:
- return 'TSF_NORMAL'
- flag_txt = ''
- for k,v in tsf_flags:
- if flags & v:
- if flag_txt:
- flag_txt = flag_txt + '|' + k
- else:
- flag_txt = k
- return flag_txt
- 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)
- def StartOperations(self):
- print ('StartOperations')
- def FinishOperations(self, Result):
- print('FinishOperations: HRESULT ', Result)
- def PreRenameItem(self, Flags, Item, NewName):
- print('PreRenameItem: Renaming ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + \
- ' to ' + NewName)
- def PostRenameItem(self, Flags, Item, NewName, hrRename, NewlyCreated):
- if NewlyCreated is not None:
- newfile = NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)
- else:
- newfile = 'not renamed, HRESULT ' + str(hrRename)
- print('PostRenameItem: renamed ' + \
- Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + newfile)
- def PreMoveItem(self, Flags, Item, DestinationFolder, NewName):
- print('PreMoveItem: Moving ' + \
- Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + \
- DestinationFolder.GetDisplayName(shellcon.SHGDN_FORPARSING) + '\\' + str(NewName))
- def PostMoveItem(self, Flags, Item, DestinationFolder, NewName, hrMove, NewlyCreated):
- if NewlyCreated is not None:
- newfile = NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)
- else:
- newfile = 'not copied, HRESULT ' + str(hrMove)
- print('PostMoveItem: Moved ' + \
- Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + newfile)
- def PreCopyItem(self, Flags, Item, DestinationFolder, NewName):
- if not NewName:
- NewName = ''
- print('PreCopyItem: Copying ' + \
- Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + \
- DestinationFolder.GetDisplayName(shellcon.SHGDN_FORPARSING) + '\\' + NewName)
- print('Flags: ', decode_flags(Flags))
- def PostCopyItem(self, Flags, Item, DestinationFolder, NewName, hrCopy, NewlyCreated):
- if NewlyCreated is not None:
- newfile = NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING)
- else:
- newfile = 'not copied, HRESULT ' + str(hrCopy)
- print('PostCopyItem: Copied ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING) + ' to ' + newfile)
- print('Flags: ', decode_flags(Flags))
- def PreDeleteItem(self, Flags, Item):
- print('PreDeleteItem: Deleting ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING))
- def PostDeleteItem(self, Flags, Item, hrDelete, NewlyCreated):
- print('PostDeleteItem: Deleted ' + Item.GetDisplayName(shellcon.SHGDN_FORPARSING))
- if NewlyCreated:
- print(' Moved to recycle bin - ' + NewlyCreated.GetDisplayName(shellcon.SHGDN_FORPARSING))
- def PreNewItem(self, Flags, DestinationFolder, NewName):
- print('PreNewItem: Creating ' + DestinationFolder.GetDisplayName(shellcon.SHGDN_FORPARSING) + '\\' + NewName)
- def PostNewItem(self, Flags, DestinationFolder, NewName, TemplateName, FileAttributes, hrNew, NewItem):
- print('PostNewItem: Created ' + NewItem.GetDisplayName(shellcon.SHGDN_FORPARSING))
- def UpdateProgress(self, WorkTotal, WorkSoFar):
- print('UpdateProgress: ', WorkSoFar, WorkTotal)
- def ResetTimer(self):
- print ('ResetTimer')
- def PauseTimer(self):
- print ('PauseTimer')
- def ResumeTimer(self):
- print ('ResumeTimer')
- def CreateSink():
- return pythoncom.WrapObject(FileOperationProgressSink(), shell.IID_IFileOperationProgressSink)
|