mirror of
https://github.com/BeamMP/BeamMP-Launcher.git
synced 2026-04-05 07:16:29 +00:00
use of SHGetKnownFolderPath to get localAppData
This commit is contained in:
@@ -44,11 +44,11 @@ add_executable(${PROJECT_NAME}
|
||||
|
||||
if (WIN32)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${VcpkgRoot}/lib/discord-rpc.lib
|
||||
ZLIB::ZLIB discord-rpc OpenSSL::SSL OpenSSL::Crypto ws2_32 wx::net wx::core wx::base Dbghelp)
|
||||
ZLIB::ZLIB discord-rpc OpenSSL::SSL OpenSSL::Crypto ws2_32 wx::net wx::core wx::base Dbghelp comsuppw)
|
||||
else(WIN32) #MINGW
|
||||
add_definitions("-D_WIN32_WINNT=0x0600")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -s --static")
|
||||
target_link_libraries(${PROJECT_NAME} discord-rpc ssl crypto ws2_32 ssp crypt32 z Dbghelp)
|
||||
target_link_libraries(${PROJECT_NAME} discord-rpc ssl crypto ws2_32 ssp crypt32 z Dbghelp comsuppw)
|
||||
endif(WIN32)
|
||||
add_definitions(-DELPP_NO_DEFAULT_LOG_FILE)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "include")
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include <csignal>
|
||||
#include <windows.h>
|
||||
#include <shellapi.h>
|
||||
#include <ShlObj.h>
|
||||
#include <comutil.h>
|
||||
|
||||
LONG WINAPI CrashHandler(EXCEPTION_POINTERS* p) {
|
||||
LOG(ERROR) << "CAUGHT EXCEPTION! Code " << p->ExceptionRecord->ExceptionCode;
|
||||
@@ -129,16 +131,20 @@ std::string QueryValue(HKEY& hKey, const char* Name) {
|
||||
return {};
|
||||
}
|
||||
std::string Launcher::GetLocalAppdata() {
|
||||
HKEY Folders;
|
||||
LONG RegRes = RegOpenKeyExA(HKEY_CURRENT_USER, R"(SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)", 0, KEY_READ, &Folders);
|
||||
if(RegRes == ERROR_SUCCESS) {
|
||||
std::string Path = QueryValue(Folders, "Local AppData");
|
||||
if(!Path.empty()) {
|
||||
Path += "\\BeamNG.drive\\";
|
||||
VersionParser GameVer(BeamVersion);
|
||||
Path += GameVer.split[0] + '.' + GameVer.split[1] + '\\';
|
||||
return Path;
|
||||
}
|
||||
PWSTR folderPath = nullptr;
|
||||
|
||||
HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &folderPath);
|
||||
if (!SUCCEEDED(hr))return {};
|
||||
|
||||
_bstr_t bstrPath(folderPath);
|
||||
std::string Path((char*)bstrPath);
|
||||
CoTaskMemFree(folderPath);
|
||||
|
||||
if(!Path.empty()) {
|
||||
Path += "\\BeamNG.drive\\";
|
||||
VersionParser GameVer(BeamVersion);
|
||||
Path += GameVer.split[0] + '.' + GameVer.split[1] + '\\';
|
||||
return Path;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user