static BOOL CreateDesktopEnumList(IEnumIDListImpl *list, DWORD dwFlags) { BOOL ret = TRUE; WCHAR szPath[MAX_PATH]; TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags); /* enumerate the root folders */ if (dwFlags & SHCONTF_FOLDERS) { HKEY hkey; UINT i; /* create the pidl for This item */ ret = AddToEnumList(list, _ILCreateMyComputer()); for (i=0; i<2; i++) { if (ret && !RegOpenKeyExW(i == 0 ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, Desktop_NameSpaceW, 0, KEY_READ, &hkey)) { WCHAR iid[50]; int i=0; while (ret) { DWORD size; LONG r; size = sizeof (iid) / sizeof (iid[0]); r = RegEnumKeyExW(hkey, i, iid, &size, 0, NULL, NULL, NULL); if (ERROR_SUCCESS == r) { ret = AddToEnumList(list, _ILCreateGuidFromStrW(iid)); i++; } else if (ERROR_NO_MORE_ITEMS == r) break; else ret = FALSE; } RegCloseKey(hkey); } } } /* enumerate the elements in %windir%\desktop */ SHGetSpecialFolderPathW(0, szPath, CSIDL_DESKTOPDIRECTORY, FALSE); ret = ret && CreateFolderEnumList(list, szPath, dwFlags); return ret; }
HRESULT WINAPI CDesktopFolderEnum::Initialize(CDesktopFolder *desktopFolder, HWND hwndOwner, DWORD dwFlags) { BOOL ret = TRUE; WCHAR szPath[MAX_PATH]; static const WCHAR MyDocumentsClassString[] = L"{450D8FBA-AD25-11D0-98A8-0800361B1103}"; static const WCHAR Desktop_NameSpaceW[] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\Namespace"; TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); /* enumerate the root folders */ if (dwFlags & SHCONTF_FOLDERS) { HKEY hkey; UINT i; DWORD dwResult; /* create the pidl for This item */ if (IsNamespaceExtensionHidden(MyDocumentsClassString) < 1) { ret = AddToEnumList(_ILCreateMyDocuments()); } ret = AddToEnumList(_ILCreateMyComputer()); for (i = 0; i < 2; i++) { if (i == 0) dwResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, Desktop_NameSpaceW, 0, KEY_READ, &hkey); else dwResult = RegOpenKeyExW(HKEY_CURRENT_USER, Desktop_NameSpaceW, 0, KEY_READ, &hkey); if (dwResult == ERROR_SUCCESS) { WCHAR iid[50]; LPITEMIDLIST pidl; int i = 0; while (ret) { DWORD size; LONG r; size = sizeof (iid) / sizeof (iid[0]); r = RegEnumKeyExW(hkey, i, iid, &size, 0, NULL, NULL, NULL); if (ERROR_SUCCESS == r) { if (IsNamespaceExtensionHidden(iid) < 1) { pidl = _ILCreateGuidFromStrW(iid); if (pidl != NULL) { if (!HasItemWithCLSID(pidl)) { ret = AddToEnumList(pidl); } else { SHFree(pidl); } } } } else if (ERROR_NO_MORE_ITEMS == r) break; else ret = FALSE; i++; } RegCloseKey(hkey); } } for (i = 0; i < 2; i++) { if (i == 0) dwResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, ClassicStartMenuW, 0, KEY_READ, &hkey); else dwResult = RegOpenKeyExW(HKEY_CURRENT_USER, ClassicStartMenuW, 0, KEY_READ, &hkey); if (dwResult == ERROR_SUCCESS) { DWORD j = 0, dwVal, Val, dwType, dwIID; LONG r; WCHAR iid[50]; while(ret) { dwVal = sizeof(Val); dwIID = sizeof(iid) / sizeof(WCHAR); r = RegEnumValueW(hkey, j++, iid, &dwIID, NULL, &dwType, (LPBYTE)&Val, &dwVal); if (r == ERROR_SUCCESS) { if (Val == 0 && dwType == REG_DWORD) { LPITEMIDLIST pidl = _ILCreateGuidFromStrW(iid); if (pidl != NULL) { if (!HasItemWithCLSID(pidl)) { AddToEnumList(pidl); } else { SHFree(pidl); } } } } else if (ERROR_NO_MORE_ITEMS == r) break; else ret = FALSE; } RegCloseKey(hkey); } } } /* enumerate the elements in %windir%\desktop */ ret = ret && SHGetSpecialFolderPathW(0, szPath, CSIDL_DESKTOPDIRECTORY, FALSE); ret = ret && CreateFolderEnumList(szPath, dwFlags); ret = ret && SHGetSpecialFolderPathW(0, szPath, CSIDL_COMMON_DESKTOPDIRECTORY, FALSE); ret = ret && CreateFolderEnumList(szPath, dwFlags); return ret ? S_OK : E_FAIL; }
HRESULT WINAPI CDesktopFolderEnumY::Initialize(LPWSTR szTarget, DWORD dwFlags) { TRACE("(%p)->(flags=0x%08x)\n", this, dwFlags); /* enumerate the elements in %windir%\desktop */ return CreateFolderEnumList(szTarget, dwFlags); }