diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 4985fb3e6..41886f238 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -594,16 +594,36 @@ bool fgInitConfig ( int argc, char **argv ) { } #ifdef _MSC_VER - char *envp = ::getenv( "APPDATA" ); + // Best solution is to set fg-home to My Documents but it requires reading the Windows registry + bool fg_home_set = false; + HKEY hKey; + LONG rc = RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", 0, KEY_QUERY_VALUE, &hKey ); + if ( rc == ERROR_SUCCESS ) { + DWORD vt,bs; + rc = RegQueryValueEx( hKey, "Personal", NULL, &vt, NULL, &bs ); + if ( rc == ERROR_SUCCESS ) { + unsigned char *buff = new unsigned char[ bs ]; + rc = RegQueryValueEx( hKey, "Personal", NULL, &vt, buff, &bs ); + fgSetString("/sim/fg-home", (char *)buff); + fg_home_set = true; + delete [] buff; + } + RegCloseKey( hKey ); + } + char *envp = ::getenv( "APPDATA" ); // APPDATA is for applications and is hidden if (envp != NULL ) { SGPath config( envp ); config.append( "flightgear.org" ); + if ( !fg_home_set ) { + fgSetString("/sim/fg-home", config.c_str()); + fg_home_set = true; + } #else if ( homedir != NULL ) { SGPath config( homedir ); config.append( ".fgfs" ); -#endif fgSetString("/sim/fg-home", config.c_str()); +#endif config.append( "autosave.xml" ); SG_LOG(SG_INPUT, SG_INFO, "Reading user settings from autosave.xml"); try {