Spaces:
Running
Running
# 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 | |
) | |