Получение информации о каталоге
От: Andy Беларусь  
Дата: 10.01.04 13:53
Оценка:
Привет всем.

В своём проекте я использую окно shell в котором отображается какая-нибудь папка, например C:\Program Files . Файлы в папке располагаются в виде списка с несколькими колонками дополнительной информации о файле, например, имя, размер и т.п. (обычно 4). Для получения информации о колонке я использую интерфейс IShellFolder2 и его метод GetDetailsOf. Но что-то не так. И QueryInterface не возвращает мне IShellFolder2 как показано в примере. hr — результат — при этом имеет значение 0x80004002 : no interface supported.
        ........
        //----------------------------------------------------
        CString sFolderPath = "c:\\Program Files";
        int nColumn = 0;

        IShellFolder *psfParentFolder=NULL, *psfSubFolder=NULL;
    LPITEMIDLIST pdlPath;

    HRESULT hr = SHGetDesktopFolder(&psfParentFolder);    

    if (FAILED(hr))
        return hr;

    WCHAR wszPathName[256];
    
    MultiByteToWideChar( CP_ACP, 0, sFolderPath, sFolderPath.GetLength()+1, wszPathName,   
        sizeof(wszPathName)/sizeof(wszPathName[0]) );
    
    hr = psfParentFolder->ParseDisplayName(NULL, NULL, wszPathName, NULL, &pdlPath, NULL);    

    if (FAILED(hr))
        return hr;
    

    hr = psfParentFolder->BindToObject(pdlPath, 0, IID_IShellFolder, (void**)&psfSubFolder);

    if (FAILED(hr))
        return hr;

    SHELLDETAILS ShellDetails;

    IShellFolder2 *pShellFolder2=NULL;

    hr = psfSubFolder->QueryInterface(IID_IShellFolder2,(LPVOID*)&pShellFolder2);
    if (SUCCEEDED(hr))
    {
        hr = pShellFolder2->GetDetailsOf(pdlPath,nColumn,&ShellDetails);
        pShellFolder2->Release();
    }
        //----------------------------------------------------
        ........


В чём может быть дело? Может кто-то знает более простой способ получить информацию о колонках в ShellList?

С уважением,
Андрей
Re: Получение информации о каталоге
От: SexMachine Украина www.is.svitonline.com/sashko1
Дата: 10.01.04 14:39
Оценка:
Здравствуйте, Andy, Вы писали:

A>В своём проекте я использую окно shell

A>...
A>Для получения информации о колонке я использую интерфейс IShellFolder2 и его метод GetDetailsOf.
A>Но что-то не так. И QueryInterface не возвращает мне IShellFolder2 как показано в примере.
A>hr — результат — при этом имеет значение 0x80004002 : no interface supported.



Вот хорошо бы было привести тут версию операционки...

читаем:

IShellFolder2
Requirements
Version 5.00 and later of Shell32.dll

Windows NT/2000: Requires Windows 2000.
-----------------^^^^^^^^^^^^^^^^^^^^
Windows 95/98/Me: Requires Windows Me.
------------------^^^^^^^^^^^^^^^^^^^^

Попал ? :-)
У кого-то варит голова, у кого-то — желудок...
Re[2]: Получение информации о каталоге
От: Andy Беларусь  
Дата: 11.01.04 08:54
Оценка:
Я использую ОС Windows XP,
данный пример собираю на VC6.

Действительно в IShellFolder2 доступен только в более поздних версиях ОС, но
для Windows 95/98 должен быть доступен интерфейс IShellDetails, правда тоже с минимальной версией shell32.dll 5.0 .
Проблема как раз таки в том, что я его не могу получить в системе где он поддерживается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.