Skip to content

Commit

Permalink
Dynamically loading SHCreateShellItemArrayFromIDLists, since it's mis…
Browse files Browse the repository at this point in the history
…sing from XP.
  • Loading branch information
alur committed Aug 7, 2013
1 parent e638d64 commit c605a27
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 12 deletions.
34 changes: 31 additions & 3 deletions litestep/DesktopWallpaper.cpp
Expand Up @@ -26,13 +26,39 @@
#include "../utility/shellhlp.h"


//
// Wrapper around SHCreateShellItemArrayFromIDLists.
// Until we drop XP support.
//
HRESULT LSCreateShellItemArrayFromIDLists(UINT cidl, PCIDLIST_ABSOLUTE_ARRAY rgpidl,
IShellItemArray **ppsiItemArray)
{
typedef HRESULT (WINAPI* PROCTYPE)(UINT cidl, PCIDLIST_ABSOLUTE_ARRAY rgpidl,
IShellItemArray **ppsiItemArray);
static PROCTYPE proc = nullptr;

if (proc == nullptr)
{
proc = (PROCTYPE)GetProcAddress(GetModuleHandle(_T("Shell32.dll")),
"SHCreateShellItemArrayFromIDLists");
}

if (proc == nullptr)
{
return E_FAIL;
}

return proc(cidl, rgpidl, ppsiItemArray);
}


//
// DesktopWallpaper
//
DesktopWallpaper::DesktopWallpaper()
{
m_uRefCount = 1;
EnumDisplayMonitors(NULL, NULL, [] (HMONITOR hMonitor, HDC, LPRECT rect, LPARAM lParam) -> BOOL
EnumDisplayMonitors(nullptr, nullptr, [] (HMONITOR hMonitor, HDC, LPRECT rect, LPARAM lParam) -> BOOL
{
DesktopWallpaper* self = (DesktopWallpaper*)lParam;

Expand Down Expand Up @@ -171,9 +197,11 @@ HRESULT DesktopWallpaper::GetWallpaper(LPCWSTR pwzMonitorID, LPWSTR* ppwzWallpap
}
else
{
// If we are displaying wallpapers per-monitor, or a slideshow is running...

*ppwzWallpaper = (LPWSTR)CoTaskMemAlloc(MAX_PATH*sizeof(WCHAR));
DWORD dwType = REG_SZ;
DWORD dwSize = MAX_PATH*sizeof(WCHAR);
*ppwzWallpaper = (LPWSTR)CoTaskMemAlloc(MAX_PATH*sizeof(WCHAR));
SHGetValue(HKEY_CURRENT_USER, L"Control Panel\\Desktop", L"Wallpaper", &dwType, *ppwzWallpaper, &dwSize);
}
return S_OK;
Expand Down Expand Up @@ -446,7 +474,7 @@ HRESULT DesktopWallpaper::GetSlideshow(IShellItemArray** ppItems)

if (SUCCEEDED(hr))
{
hr = SHCreateShellItemArrayFromIDLists(1, (LPCITEMIDLIST*)&idList, ppItems);
hr = LSCreateShellItemArrayFromIDLists(1, (LPCITEMIDLIST*)&idList, ppItems);
}

if (idList)
Expand Down
6 changes: 3 additions & 3 deletions litestep/litestep_vc11.vcxproj
Expand Up @@ -36,17 +36,17 @@
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
Expand Down
6 changes: 3 additions & 3 deletions lsapi/lsapi_vc11.vcxproj
Expand Up @@ -36,17 +36,17 @@
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
Expand Down
6 changes: 3 additions & 3 deletions utility/utility_vc11.vcxproj
Expand Up @@ -36,17 +36,17 @@
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
<PlatformToolset>v110_xp</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
Expand Down

0 comments on commit c605a27

Please sign in to comment.