123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- # Sample implementation of IFileOperationProgressSink that just prints
- # some basic info
-
- import pythoncom
- from win32com.server.policy import DesignatedWrapPolicy
- from win32com.shell import shell, shellcon
-
- 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
- )
|