aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/sdl/win32/win32_wrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/sdl/win32/win32_wrapper.cpp')
-rw-r--r--backends/platform/sdl/win32/win32_wrapper.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/backends/platform/sdl/win32/win32_wrapper.cpp b/backends/platform/sdl/win32/win32_wrapper.cpp
index b61098ab9a..6ad0f725ed 100644
--- a/backends/platform/sdl/win32/win32_wrapper.cpp
+++ b/backends/platform/sdl/win32/win32_wrapper.cpp
@@ -24,10 +24,15 @@
// We need certain functions that are excluded by default
#undef NONLS
#include <windows.h>
+#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
+// required for SHGetSpecialFolderPath in shlobj.h
+#define _WIN32_IE 0x400
+#endif
+#include <shlobj.h>
#include "backends/platform/sdl/win32/win32_wrapper.h"
-// VerSetConditionMask and VerifyVersionInfo didn't appear until Windows 2000,
+// VerSetConditionMask, VerifyVersionInfo and SHGetFolderPath didn't appear until Windows 2000,
// so we need to check for them at runtime
ULONGLONG VerSetConditionMaskFunc(ULONGLONG dwlConditionMask, DWORD dwTypeMask, BYTE dwConditionMask) {
typedef ULONGLONG(WINAPI *VerSetConditionMaskFunction)(ULONGLONG conditionMask, DWORD typeMask, BYTE conditionOperator);
@@ -49,6 +54,16 @@ BOOL VerifyVersionInfoFunc(LPOSVERSIONINFOEXA lpVersionInformation, DWORD dwType
return verifyVersionInfo(lpVersionInformation, dwTypeMask, dwlConditionMask);
}
+HRESULT SHGetFolderPathFunc(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath) {
+ typedef HRESULT (WINAPI *SHGetFolderPathFunc)(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
+
+ SHGetFolderPathFunc pSHGetFolderPath = (SHGetFolderPathFunc)GetProcAddress(GetModuleHandle(TEXT("shell32.dll")), "SHGetFolderPathA");
+ if (pSHGetFolderPath)
+ return pSHGetFolderPath(hwnd, csidl, hToken, dwFlags, pszPath);
+
+ return SHGetSpecialFolderPath(hwnd, pszPath, csidl & !CSIDL_FLAG_MASK, csidl & CSIDL_FLAG_CREATE) ? S_OK : E_NOTIMPL;
+}
+
namespace Win32 {
bool confirmWindowsVersion(int majorVersion, int minorVersion) {