Я пытаюсь программно перечислить все установленные приложения в моей системе win10. В основном, я пытаюсь получить список, который вы можете увидеть, когда вы набираете "shell: appsFolder" в окне проводника.
Вот код, который я использую:
HRESULT hr;
IShellFolder *psParent= nullptr, *psApps= nullptr;
LPITEMIDLIST pidlSystem = NULL;
hr = SHGetFolderLocation(NULL, CSIDL_SYSTEM, NULL, NULL, &pidlSystem); // get root pidl which is needed to get the parrent of our app folder
LPITEMIDLIST pidlApps= NULL;
if (!SUCCEEDED(hr= SHGetKnownFolderItem(FOLDERID_AppsFolder, KF_FLAG_DEFAULT, NULL, IID_IShellItem , (void**)&pidlApps)))
goto done; // get pidl for apps folder
if (!SUCCEEDED(hr=SHBindToParent(pidlSystem, IID_IShellFolder, (void **) &psParent, (LPCITEMIDLIST*)&pidlApps)))
goto done; // Get shell folder of parrent, which is needed to get shell folder of appsFolder
psApps= NULL;
if (!SUCCEEDED(hr= psParent->BindToObject(pidlApps, nullptr, IID_IShellFolder, (void **)&psApps)))
goto done; // finally get shell folder of appsFolder!
IEnumIDList *IDList;
if (!SUCCEEDED(hr= psApps->EnumObjects(nullptr, SHCONTF_NONFOLDERS, &IDList)))
goto done; // start the file scanning process
LPITEMIDLIST object= (LPITEMIDLIST)CoTaskMemAlloc(sizeof(*object)); // allocate room to receive data..
while (IDList->Next(1, &object, nullptr)!=S_FALSE) // and the list loop
{
STRRET strDispName;
if (!SUCCEEDED(hr= psApps->GetDisplayNameOf(object, SHGDN_NORMAL, &strDispName)))
continue; // get the name in some weired format
TCHAR szDisplayName[MAX_PATH];
if (!SUCCEEDED(hr= StrRetToBuf(&strDispName, pidlApps, szDisplayName, sizeof(szDisplayName))))
continue; // transform it to string...
ATLTRACE2(L"found %s\n", szDisplayName);
}
IDList->Release();
CoTaskMemFree(object);
проблема в том, что я получаю список из более чем 2000 элементов, включая .jpg и другие файлы .dll, но этот список НЕ соответствует тому, что мне показывает окно проводника! Например, слово «word» отсутствует, ни как ссылка, ни как winword.exe, а находится в окне обозревателя.
Любая подсказка, что происходит?