diff --git a/litestep/DesktopWallpaper.cpp b/litestep/DesktopWallpaper.cpp
index 3cf2afb..898a0ea 100755
--- a/litestep/DesktopWallpaper.cpp
+++ b/litestep/DesktopWallpaper.cpp
@@ -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;
@@ -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;
@@ -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)
diff --git a/litestep/litestep_vc11.vcxproj b/litestep/litestep_vc11.vcxproj
index 70ae57a..04bc05b 100755
--- a/litestep/litestep_vc11.vcxproj
+++ b/litestep/litestep_vc11.vcxproj
@@ -36,17 +36,17 @@
Application
Unicode
true
- v110
+ v110_xp
Application
Unicode
- v110
+ v110_xp
Application
Unicode
- v110
+ v110_xp
diff --git a/lsapi/lsapi_vc11.vcxproj b/lsapi/lsapi_vc11.vcxproj
index 354eef6..ae05807 100755
--- a/lsapi/lsapi_vc11.vcxproj
+++ b/lsapi/lsapi_vc11.vcxproj
@@ -36,17 +36,17 @@
DynamicLibrary
Unicode
true
- v110
+ v110_xp
DynamicLibrary
Unicode
- v110
+ v110_xp
DynamicLibrary
Unicode
- v110
+ v110_xp
diff --git a/utility/utility_vc11.vcxproj b/utility/utility_vc11.vcxproj
index 516680d..6936f89 100755
--- a/utility/utility_vc11.vcxproj
+++ b/utility/utility_vc11.vcxproj
@@ -36,17 +36,17 @@
StaticLibrary
Unicode
true
- v110
+ v110_xp
StaticLibrary
Unicode
- v110
+ v110_xp
StaticLibrary
Unicode
- v110
+ v110_xp