13# define _WIN32_IE 0x0501
24 const char *system_dir =
nullptr;
27 static char knownpath[MAX_PATH * 3 + 128] = {0};
28 PWSTR knownpath_16 =
nullptr;
30 HRESULT hResult = SHGetKnownFolderPath(
31 FOLDERID_ProgramData, KF_FLAG_DEFAULT,
nullptr, &knownpath_16);
33 if (hResult == S_OK) {
35 strcat(knownpath,
"\\Blender Foundation\\Blender\\");
36 strcat(knownpath, versionstr);
37 system_dir = knownpath;
40 CoTaskMemFree(knownpath_16);
46 const char *user_dir =
nullptr;
48 static char knownpath[MAX_PATH * 3 + 128] = {0};
49 PWSTR knownpath_16 =
nullptr;
51 HRESULT hResult = SHGetKnownFolderPath(
52 FOLDERID_RoamingAppData, KF_FLAG_DEFAULT,
nullptr, &knownpath_16);
54 if (hResult == S_OK) {
56 strcat(knownpath,
"\\Blender Foundation\\Blender\\");
57 strcat(knownpath, versionstr);
61 CoTaskMemFree(knownpath_16);
68 const char *special_dir =
nullptr;
73 folderid = FOLDERID_Desktop;
76 folderid = FOLDERID_Documents;
79 folderid = FOLDERID_Downloads;
82 folderid = FOLDERID_Music;
85 folderid = FOLDERID_Pictures;
88 folderid = FOLDERID_Videos;
91 folderid = FOLDERID_LocalAppData;
96 "GHOST_SystemPathsWin32::getUserSpecialDir(): Invalid enum value for type parameter");
100 static char knownpath[MAX_PATH * 3] = {0};
101 PWSTR knownpath_16 =
nullptr;
102 HRESULT hResult = SHGetKnownFolderPath(folderid, KF_FLAG_DEFAULT,
nullptr, &knownpath_16);
104 if (hResult == S_OK) {
106 special_dir = knownpath;
109 if ((special_dir ==
nullptr) || (special_dir[0] ==
'\0')) {
113 CoTaskMemFree(knownpath_16);
119 static char fullname[MAX_PATH * 3] = {0};
120 wchar_t fullname_16[MAX_PATH * 3];
122 if (GetModuleFileNameW(0, fullname_16, MAX_PATH)) {
135 IShellItem *shell_item;
137 HRESULT hr = CoInitializeEx(
nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
138 if (!SUCCEEDED(hr)) {
142 hr = SHCreateItemFromParsingName(filepath_16,
nullptr, IID_PPV_ARGS(&shell_item));
144 info.psi = shell_item;
145 info.pszAppID = BLENDER_WIN_APPID_16;
146 SHAddToRecentDocs(SHARD_APPIDINFO, &info);
#define GHOST_ASSERT(x, info)
GHOST_TUserSpecialDirTypes
@ GHOST_kUserSpecialDirDesktop
@ GHOST_kUserSpecialDirMusic
@ GHOST_kUserSpecialDirPictures
@ GHOST_kUserSpecialDirVideos
@ GHOST_kUserSpecialDirDownloads
@ GHOST_kUserSpecialDirCaches
@ GHOST_kUserSpecialDirDocuments
const char * getBinaryDir() const override
~GHOST_SystemPathsWin32() override
const char * getSystemDir(int version, const char *versionstr) const override
std::optional< std::string > getUserSpecialDir(GHOST_TUserSpecialDirTypes type) const override
void addToSystemRecentFiles(const char *filepath) const override
const char * getUserDir(int version, const char *versionstr) const override
int conv_utf_16_to_8(const wchar_t *in16, char *out8, size_t size8)
#define UTF16_ENCODE(in8str)
#define UTF16_UN_ENCODE(in8str)