diff --git a/dlls/shell32/folders.c b/dlls/shell32/folders.c index 055466677ab..35cdd5e1cbb 100644 --- a/dlls/shell32/folders.c +++ b/dlls/shell32/folders.c @@ -259,13 +259,36 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation( found = TRUE; } - - if (!found) /* default icon */ + else if (!strcasecmp(sTemp, "lnkfile")) { - lstrcpynW(szIconFile, swShell32Name, cchMax); - *piIndex = 0; + /* extract icon from shell shortcut */ + IShellFolder* dsf; + IShellLinkW* psl; + + if (SUCCEEDED(SHGetDesktopFolder(&dsf))) + { + HRESULT hr = IShellFolder_GetUIObjectOf(dsf, NULL, 1, (LPCITEMIDLIST*)&This->pidl, &IID_IShellLinkW, NULL, (LPVOID*)&psl); + + if (SUCCEEDED(hr)) + { + hr = IShellLinkW_GetIconLocation(psl, szIconFile, MAX_PATH, piIndex); + + if (SUCCEEDED(hr) && *szIconFile) + found = TRUE; + + IShellLinkW_Release(psl); + } + + IShellFolder_Release(dsf); + } } } + + if (!found) /* default icon */ + { + lstrcpynW(szIconFile, swShell32Name, cchMax); + *piIndex = 0; + } } TRACE("-- %s %x\n", debugstr_w(szIconFile), *piIndex);