我的目标是将特定文件从回收站还原到指定位置,即不将其还原到其原始位置。我找到了this article和this one,它们解释了如何枚举当前在回收站中的文件。但它没有显示如何做我需要的。
知道该怎么做吗?
答案 0 :(得分:2)
你可以通过模拟拖动和放大来实现。下降。使用IShellFolder::GetUIObjectOf()
从回收站获取IDataObject
接口,并获取目标文件夹的IDropTarget
接口。然后,您可以拨打IDropTarget::DragEnter()
,然后拨打IDropTarget::Drop()
,该文件将移至您的目标位置。
答案 1 :(得分:2)
从Windows Vista开始,可以使用IFileOperation将任何对象从RecycleBin还原到任何文件夹。用法示例:
procedure RestoreItem(AShellFolder: IShellFolder; AChild: PItemIDList; const ADestFolder: UnicodeString);
var
Item: IShellItem;
DestFolder: IShellItem;
FileOperation: IFileOperation;
begin
OleCheck(SHCreateItemWithParent(nil, AShellFolder, AChild, IShellItem, Item));
try
OleCheck(SHCreateItemFromParsingName(PWideChar(ADestFolder), nil, IShellItem, DestFolder));
try
OleCheck(CoCreateInstance(CLSID_FileOperation, nil, CLSCTX_ALL, IFileOperation, FileOperation));
try
OleCheck(FileOperation.MoveItem(Item, DestFolder, nil, nil));
OleCheck(FileOperation.PerformOperations);
finally
FileOperation := nil;
end;
finally
DestFolder := nil;
end;
finally
Item := nil;
end;
end;
答案 2 :(得分:0)