Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Обработка содержимого Корзины.


Автор: AndreySol 12.6.2004, 05:28
Вопрос по обработке содержимого Корзины.
Помогите начинающему в Visual C++ и MFC.
Недавно получил на форуме подсказку как поиметь содержимое Корзины.
Привожу код полностью.
//инициализируем КОМ
CoInitialize(NULL);
ITEMIDLIST* pidl;
//получаем PIDL для Корзины
HRESULT Result;
Result = SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidl);
if(SUCCEEDED(Result))
{
IShellFolder *df, *sf;
//получаем интерфейс для Главной Папки
Result = SHGetDesktopFolder(&df);
if(SUCCEEDED(Result))
{
// получаем интерфейс для Корзины
Result = df-> BindToObject(pidl, NULL, IID_IShellFolder, (void**)&sf);
if(SUCCEEDED(Result))
{
IEnumIDList *ieidl;
//список файлов в корзине, для папок надо флаг SHCONTF_FOLDERS и
//для каждой папки повторить процедуру, имхо
Result = sf -> EnumObjects(NULL, SHCONTF_NONFOLDERS, &ieidl);
if(SUCCEEDED(Result))
{
ITEMIDLIST* sfidl;
ULONG Cnt = 0;
while(ieidl -> Next(1, &sfidl, &Cnt) == NOERROR)
{
STRRET fName;
//получаем стуктуру "описания" файла
Result = sf -> GetDisplayNameOf(sfidl, SHGDN_NORMAL, &fName);
if(SUCCEEDED(Result))
{
TCHAR* pszName;
//получаем полный путь и имя файла
Result = StrRetToStr(&fName, sfidl, &pszName);
if(SUCCEEDED(Result))
{ // выводим куда нибудь
//Это для билдера, для VC тоже
// что-нибудь вроде этого

CoTaskMemFree(pszName);
}
}
}
ieidl->Release();
}
sf->Release();
}
df->Release();
}
IMalloc *im;
Result=CoGetMalloc(1,&im);
if(SUCCEEDED(Result))
{
if(im->DidAlloc(pidl)==1)
im->Free(pidl);
im->Release();
}
}
CoUninitialize();
При сборке получаю - error C2065: 'StrRetToStr' : undeclared identifier
Пошел в MSDN, там нашел эту ф-цию для нее написано:
Header shlwapi.h
Import library shlwapi.lib
Подключил: в cpp - файле #include "shlwapi.h", а в настройках проекта "Link -> General -> Object\Library modules - shlwapi.lib
Собираю опять - снова error C2065: 'StrRetToStr' : undeclared identifier
Помогите ! Что не так делаю ?
На всякий случай - у меня WinMe и Visual C++ 6.0 + SP 5.
Заранее спасибо за ответы и подсказки.

Автор: Олег М 15.6.2004, 12:54
В Vc.net вроде всё нормально.
У тебя линкер даёт ошибку или компилятор?

Автор: AndreySol 16.6.2004, 05:23
Олегу М.
На другом форуме получил такой ответ на мой вопрос:

"А ты в хедер заглядывал? Я так думаю, что там этого определния нет... А появится оно там после установки Platform SDK.
Поэтому, можешь просто где-нить в исходнике объявить эту функцию:
#ifndef StrRetToStr
HRESULT StrRetToStr(
LPSTRRET pstr,
LPCITEMIDLIST pidl,
LPTSTR *ppszName
);
#endif
Чтобы собиралось как с Platform SDK, так и без него, описание функции внесем под условный define".
Буду пробовать.
Всем спасибо.

Автор: Олег М 16.6.2004, 06:03
В том то и дело, что для начала я заглянул в заголовок в VC60. Устанавливать студию просто не стал. Всё там есть.

Автор: AndreySol 26.8.2004, 05:39
Получилось как подсказали, все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)