Re[2]: Как получить названия иконок, через хэндл рабочего ст
От: Рома Россия  
Дата: 20.07.03 10:45
Оценка:
Здравствуйте, Рома, Вы писали:

Р>Здравствуйте, NetMan_NetMan, Вы писали:


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

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

Р>Через Handle рабочего стола никак. Ну можно вообще-то найти дочернее окно с именем класса SysListView32 и перебрать все элементы, это будут иконки рабочего стола, но это какой-то не очень способ.

Р>Вот IMHO более правильный

Р>Надеюсь, ничего не забыл. А то уже 2 ночи

Забыл.
Таким образом, версия 1.1
#include <windows.h>
#include <shlobj.h>

int _tmain(int argc, _TCHAR* argv[])
{
    IShellFolder *pSF;
    IEnumIDList *pIDListEnum;
    IMalloc *pMalloc;
    ULONG Retr;
    SHGetDesktopFolder(&pSF);
    pSF->EnumObjects(NULL, SHCONTF_NONFOLDERS | SHCONTF_FOLDERS, &pIDListEnum);
    SHGetMalloc(&pMalloc);
    LPITEMIDLIST pIDList;
    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);
    }
    pMalloc->Release();
    pSF->Release();
    pIDListEnum->Release();
    return 0;
}

Address of an array of ITEMIDLIST pointers that receives the item identifiers. The implementation must allocate these item identifiers using the Shell's allocator (retrieved by the SHGetMalloc function). The calling application is responsible for freeing the item identifiers using the Shell's allocator.
Да по NULL указателю всё равно ничего не освободишь
... << RSDN@Home 1.0 beta 7a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.