Re: Как получить названия иконок, через хэндл рабочего стола
От: Рома Россия  
Дата: 19.07.03 22:13
Оценка:
Здравствуйте, NetMan_NetMan, Вы писали:

NN>Как получить названия иконок, через хэндл рабочего стола?

NN>например, "Мой компьютер","WinAMP" и т.д

Через Handle рабочего стола никак. Ну можно вообще-то найти дочернее окно с именем класса SysListView32 и перебрать все элементы, это будут иконки рабочего стола, но это какой-то не очень способ.
Вот IMHO более правильный
#include <windows.h>
#include <shlobj.h>

int _tmain(int argc, _TCHAR* argv[])
{
    IShellFolder *pSF;
    IEnumIDList *pIDListEnum;
    IMalloc *pMalloc;
    ULONG Retr;
    CoInitialize(NULL);
    SHGetDesktopFolder(&pSF);
    pSF->EnumObjects(NULL, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pIDListEnum);
    CoGetMalloc(1, &pMalloc);
    LPITEMIDLIST pIDList = (LPITEMIDLIST) pMalloc->Alloc(MAX_PATH + 1);
    pIDListEnum->Next(1, &pIDList, &Retr);
    STRRET Str;
    while (pIDList)
    {
        Str.uType = STRRET_WSTR;
        pSF->GetDisplayNameOf(pIDList, SHGDN_INFOLDER, &Str);
        //в Str.pOleStr или Str.cStr хранится строка с именем иконки
        pIDListEnum->Next(1, &pIDList, &Retr);
    }
    pMalloc->Free(pIDList);
    pSF->Release();
    pIDListEnum->Release();
    pMalloc->Release();
    CoUninitialize();
    return 0;
}

Надеюсь, ничего не забыл. А то уже 2 ночи
Обрати внимание на строку с комментарием, несмотря на флаг ф-ия фозвращает значения куда попало, не зависимо от выставления флага.
Для "My Computer", "Recycle Bin" и т.д. возвращает в pOleStr, для ярлыков и файлов почему-то в cStr.
... << RSDN@Home 1.0 beta 7a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.