자료를 찾다가 팁에 있는 예제를 사용해 보았는데요 복구가 되지 않는 군요.
혹시 다른 방법이 있는지 부탁 드립니다.
소스
<!--CodeS-->
uses ShellApi;
function DeleteFileWithUndo(FileName: string): boolean;
var
SHFileOpStruct: TSHFileOpStruct;
begin
FillChar(SHFileOpStruct, SizeOf(SHFileOpStruct), 0);
with SHFileOpStruct do begin
wFunc := FO_DELETE;
pFrom := PChar(FileName);
fFlags := FOF_ALLOWUNDO
or FOF_NOCONFIRMATION
or FOF_SILENT;
end;
result := (0 = ShFileOperation(SHFileOpStruct));
end;
<!--CodeE-->
흠.. 아래 소스는 휴지통에 있는 파일을 복원하는 소스가 아니라 파일을 삭제할 때 휴지통에 넣어서 복원이 가능하게 삭제하는 코드입니다.
아래와 같이 쉘폴더를 불러서, 아이템을 얻고, 해당 아이템의 숏컷 핸들러를 얻은다음 Invoke 해주는 방법으로 휴지통에 있는 파일을 복원이 가능하다고 하네요...
1. 휴지통의 IShellFolder2 인터페이스를 얻어 온다.
2. IShellFolder2::EnumObjects() 를 이용하여 IEnumIDList 값을 긁어 들인다.
3. IEnumIDList::Next() 메서드를 이용하여, 개별적인 ITEMIDLIST 값들을 하나씩 읽어 온다.
4. 각각 읽어 온넘들을 pidl 이라 치면, 해당하는 IContextMenu 인터페이스를 얻는다.
5. IContextMenu::QueryContextMenu, IContextMenu::GetCommandString, IContextMenu::InvokeCommand
메서드들을 적당한 인자를 주어 호출하여, 선택된 아이템을 복구한다.
^^ 항상 즐코하세요...