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