질문에 답변 하나 달으려다 엄청난 시간이 날라갔네요. 조만간에 모가지가 될지도 ㅡㅜ;
휴지통에 보내기는 많이 보내봤는데.. 휴지통에 있는 넘을 복구하는 방법은 Undocumented라.. MSDN을
찾아봐도 껀덕지 나오는게 없더군요..
결국 쉘폴더를 불러서, 아이템을 얻고, 해당 아이템의 숏컷 핸들러를 얻은다음 Invoke 해주는
방법을 취했습니다.
동작은 잘되더군요..
1. 휴지통의 IShellFolder2 인터페이스를 얻어 온다.
2. IShellFolder2::EnumObjects() 를 이용하여 IEnumIDList 값을 긁어 들인다.
3. IEnumIDList::Next() 메서드를 이용하여, 개별적인 ITEMIDLIST 값들을 하나씩 읽어 온다.
4. 각각 읽어 온넘들을 pidl 이라 치면, 해당하는 IContextMenu 인터페이스를 얻는다.
5. IContextMenu::QueryContextMenu, IContextMenu::GetCommandString, IContextMenu::InvokeCommand
메서드들을 적당한 인자를 주어 호출하여, 선택된 아이템을 복구한다.
대략 위와 같은 구조로 동작하구요..
참고 사항으로
휴지통에 떤지기 : SHFileOperation
휴지통을 비우기 : SHEmptyRecycleBin
휴지통에 들은 파일 갯수와 크기 얻기 : SHQueryRecycleBin
이런 함수들이 있습니다.
MSDN에서 참고 하실만한 페이지에는
1. Managing the File System
SHFileOperation 함수를 사용하는 응용예가 가장 자세히, 그리고 Notify와 Recent 연동까지.. 잘 나와있습니다.
2. Shell Functions
일반적으로 다루는 쉘함수들의 리스트가 쭉 나와 있구요, 평소에 접하지 못하는 혹은 필요한데 못찾던것들 까지
잘 구분되어 있습니다.
그럼 즐거운 한주 되세요...
|