diff --git a/HMCLauncher/.clang-format b/HMCLauncher/.clang-format index 7a5cb8897..3d71f04b4 100644 --- a/HMCLauncher/.clang-format +++ b/HMCLauncher/.clang-format @@ -1,2 +1,4 @@ # Use the Google style in this project. -BasedOnStyle: Google \ No newline at end of file +BasedOnStyle: Google + +SortIncludes: false \ No newline at end of file diff --git a/HMCLauncher/HMCL/HMCL.vcxproj b/HMCLauncher/HMCL/HMCL.vcxproj index 7c1a5bdea..c3abd4275 100644 --- a/HMCLauncher/HMCL/HMCL.vcxproj +++ b/HMCLauncher/HMCL/HMCL.vcxproj @@ -162,7 +162,7 @@ - + @@ -174,7 +174,7 @@ Create Create - + diff --git a/HMCLauncher/HMCL/HMCL.vcxproj.filters b/HMCLauncher/HMCL/HMCL.vcxproj.filters index 06f818873..fea247b7a 100644 --- a/HMCLauncher/HMCL/HMCL.vcxproj.filters +++ b/HMCLauncher/HMCL/HMCL.vcxproj.filters @@ -27,7 +27,7 @@ 头文件 - + 头文件 @@ -47,7 +47,7 @@ 源文件 - + 源文件 diff --git a/HMCLauncher/HMCL/Version.cpp b/HMCLauncher/HMCL/Version.cpp index 9113dc7ef..ed91397dd 100644 --- a/HMCLauncher/HMCL/Version.cpp +++ b/HMCLauncher/HMCL/Version.cpp @@ -1,17 +1,16 @@ #include "stdafx.h" -#include "Version.h" +#include "version.h" -using namespace std; - -Version::Version(const wstring & rawString) -{ - int idx = 0; - ver[0] = ver[1] = ver[2] = ver[3] = 0; - for (auto &i : rawString) - { - if (idx >= 4) break; - if (i == '.') ++idx; - else if (i == '_') ++idx; - else if (isdigit(i)) ver[idx] = ver[idx] * 10 + (i - L'0'); - } +Version::Version(const std::wstring &rawString) { + int idx = 0; + ver[0] = ver[1] = ver[2] = ver[3] = 0; + for (auto &i : rawString) { + if (idx >= 4) break; + if (i == '.') + ++idx; + else if (i == '_') + ++idx; + else if (isdigit(i)) + ver[idx] = ver[idx] * 10 + (i - L'0'); + } } diff --git a/HMCLauncher/HMCL/Version.h b/HMCLauncher/HMCL/Version.h index 630b67da2..523690402 100644 --- a/HMCLauncher/HMCL/Version.h +++ b/HMCLauncher/HMCL/Version.h @@ -2,39 +2,30 @@ #include -class Version -{ -public: - int ver[4]; +class Version { + public: + int ver[4]; - Version(const std::wstring &rawString); + Version(const std::wstring &rawString); - template - Version(std::initializer_list ver_list) - { - int i = 0; - for (const auto &data : ver_list) - { - if (i >= 4) - break; - ver[i++] = data; - } - } + template + Version(std::initializer_list ver_list) { + int i = 0; + for (const auto &data : ver_list) { + if (i >= 4) break; + ver[i++] = data; + } + } - bool operator<(const Version &other) const - { - for (int i = 0; i < 4; ++i) - if (ver[i] != other.ver[i]) - return ver[i] < other.ver[i]; - return false; - } + bool operator<(const Version &other) const { + for (int i = 0; i < 4; ++i) + if (ver[i] != other.ver[i]) return ver[i] < other.ver[i]; + return false; + } - bool operator<=(const Version &other) const - { - for (int i = 0; i < 4; ++i) - if (ver[i] != other.ver[i]) - return ver[i] < other.ver[i]; - return true; - } + bool operator<=(const Version &other) const { + for (int i = 0; i < 4; ++i) + if (ver[i] != other.ver[i]) return ver[i] < other.ver[i]; + return true; + } }; - diff --git a/HMCLauncher/HMCL/java.cpp b/HMCLauncher/HMCL/java.cpp index a0441c209..01b0bb441 100644 --- a/HMCLauncher/HMCL/java.cpp +++ b/HMCLauncher/HMCL/java.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "java.h" #include "os.h" +#include "version.h" const Version JAVA_8(L"1.8"), JAVA_11(L"11"); @@ -11,76 +12,72 @@ const LPCWSTR JRE_NEW = L"SOFTWARE\\JavaSoft\\JRE"; bool oldJavaFound = false; -bool FindJavaByRegistryKey(HKEY rootKey, LPCWSTR subKey, std::wstring & path) -{ - WCHAR javaVer[MAX_KEY_LENGTH]; // buffer for subkey name, special for JavaVersion - DWORD cbName; // size of name string - DWORD cSubKeys = 0; // number of subkeys - DWORD cbMaxSubKey; // longest subkey size - DWORD cValues; // number of values for key - DWORD cchMaxValue; // longest value name - DWORD cbMaxValueData; // longest value data - LSTATUS result; +bool FindJavaByRegistryKey(HKEY rootKey, LPCWSTR subKey, std::wstring& path) { + WCHAR javaVer[MAX_KEY_LENGTH]; // buffer for subkey name, special for + // JavaVersion + DWORD cbName; // size of name string + DWORD cSubKeys = 0; // number of subkeys + DWORD cbMaxSubKey; // longest subkey size + DWORD cValues; // number of values for key + DWORD cchMaxValue; // longest value name + DWORD cbMaxValueData; // longest value data + LSTATUS result; - HKEY hKey; - if (ERROR_SUCCESS != (result = RegOpenKeyEx(rootKey, subKey, 0, KEY_WOW64_64KEY | KEY_READ, &hKey))) - return false; + HKEY hKey; + if (ERROR_SUCCESS != + (result = + RegOpenKeyEx(rootKey, subKey, 0, KEY_WOW64_64KEY | KEY_READ, &hKey))) + return false; - RegQueryInfoKey( - hKey, // key handle - NULL, // buffer for class name - NULL, // size of class string - NULL, // reserved - &cSubKeys, // number of subkeys - &cbMaxSubKey, // longest subkey size - NULL, // longest class string - &cValues, // number of values for this key - &cchMaxValue, // longest value name - &cbMaxValueData, // longest value data - NULL, // security descriptor - NULL); // last write time + RegQueryInfoKey(hKey, // key handle + NULL, // buffer for class name + NULL, // size of class string + NULL, // reserved + &cSubKeys, // number of subkeys + &cbMaxSubKey, // longest subkey size + NULL, // longest class string + &cValues, // number of values for this key + &cchMaxValue, // longest value name + &cbMaxValueData, // longest value data + NULL, // security descriptor + NULL); // last write time - if (!cSubKeys) - return false; + if (!cSubKeys) return false; - bool flag = false; - for (DWORD i = 0; i < cSubKeys; ++i) - { - cbName = MAX_KEY_LENGTH; - if (ERROR_SUCCESS != (result = RegEnumKeyEx(hKey, i, javaVer, &cbName, NULL, NULL, NULL, NULL))) - continue; + bool flag = false; + for (DWORD i = 0; i < cSubKeys; ++i) { + cbName = MAX_KEY_LENGTH; + if (ERROR_SUCCESS != (result = RegEnumKeyEx(hKey, i, javaVer, &cbName, NULL, + NULL, NULL, NULL))) + continue; - HKEY javaKey; - if (ERROR_SUCCESS != RegOpenKeyEx(hKey, javaVer, 0, KEY_READ, &javaKey)) - continue; + HKEY javaKey; + if (ERROR_SUCCESS != RegOpenKeyEx(hKey, javaVer, 0, KEY_READ, &javaKey)) + continue; - if (ERROR_SUCCESS == MyRegQueryValue(javaKey, L"JavaHome", REG_SZ, path)) - { - if (Version(javaVer) < JAVA_8) - oldJavaFound = true; - else - flag = true; - } + if (ERROR_SUCCESS == MyRegQueryValue(javaKey, L"JavaHome", REG_SZ, path)) { + if (Version(javaVer) < JAVA_8) + oldJavaFound = true; + else + flag = true; + } - if (flag) - break; - } + if (flag) break; + } - RegCloseKey(hKey); + RegCloseKey(hKey); - return flag; + return flag; } -bool FindJavaInRegistry(std::wstring & path) -{ - return FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JDK_OLD, path) || - FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JRE_OLD, path) || - FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JDK_NEW, path) || - FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JRE_NEW, path); +bool FindJavaInRegistry(std::wstring& path) { + return FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JDK_OLD, path) || + FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JRE_OLD, path) || + FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JDK_NEW, path) || + FindJavaByRegistryKey(HKEY_LOCAL_MACHINE, JRE_NEW, path); } -bool FindJava(std::wstring & path) -{ - return FindJavaInRegistry(path) || - ERROR_SUCCESS == MyGetEnvironmentVariable(L"JAVA_HOME", path); +bool FindJava(std::wstring& path) { + return FindJavaInRegistry(path) || + ERROR_SUCCESS == MyGetEnvironmentVariable(L"JAVA_HOME", path); } diff --git a/HMCLauncher/HMCL/java.h b/HMCLauncher/HMCL/java.h index 86e96ecd3..eb0a289f9 100644 --- a/HMCLauncher/HMCL/java.h +++ b/HMCLauncher/HMCL/java.h @@ -1,7 +1,6 @@ #pragma once #include #include -#include "Version.h" // Find Java installation in system registry bool FindJavaInRegistry(std::wstring &path); diff --git a/HMCLauncher/HMCL/main.cpp b/HMCLauncher/HMCL/main.cpp index 47b29e104..5f0c1b1da 100644 --- a/HMCLauncher/HMCL/main.cpp +++ b/HMCLauncher/HMCL/main.cpp @@ -4,96 +4,97 @@ #include "java.h" #include "lang.h" -using namespace std; - Version J8(TEXT("8")); -void RawLaunchJVM(const wstring &javaPath, const wstring& workdir, const wstring &jarPath) -{ - if (MyCreateProcess(L"\"" + javaPath + L"\" -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=15 -jar \"" + jarPath + L"\"", workdir)) - exit(EXIT_SUCCESS); +void RawLaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, + const std::wstring &jarPath) { + if (MyCreateProcess( + L"\"" + javaPath + + L"\" -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=15 -jar \"" + + jarPath + L"\"", + workdir)) + exit(EXIT_SUCCESS); } -void LaunchJVM(const wstring &javaPath, const wstring& workdir, const wstring &jarPath) -{ - Version javaVersion(L""); - if (!MyGetFileVersionInfo(javaPath, javaVersion)) - return; +void LaunchJVM(const std::wstring &javaPath, const std::wstring &workdir, + const std::wstring &jarPath) { + Version javaVersion(L""); + if (!MyGetFileVersionInfo(javaPath, javaVersion)) return; - if (J8 <= javaVersion) - { - RawLaunchJVM(javaPath, workdir, jarPath); - } + if (J8 <= javaVersion) { + RawLaunchJVM(javaPath, workdir, jarPath); + } } -int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) -{ - wstring path, exeName; +int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + LPWSTR lpCmdLine, int nCmdShow) { + std::wstring path, exeName; - // Since Jar file is appended to this executable, we should first get the location of JAR file. - if (ERROR_SUCCESS != MyGetModuleFileName(NULL, exeName)) - return 1; + // Since Jar file is appended to this executable, we should first get the + // location of JAR file. + if (ERROR_SUCCESS != MyGetModuleFileName(NULL, exeName)) return 1; - wstring workdir; - size_t last_slash = exeName.find_last_of(L"/\\"); - if (last_slash != wstring::npos && last_slash + 1 < exeName.size()) { - workdir = exeName.substr(0, last_slash); - exeName = exeName.substr(last_slash + 1); - } + std::wstring workdir; + size_t last_slash = exeName.find_last_of(L"/\\"); + if (last_slash != std::wstring::npos && last_slash + 1 < exeName.size()) { + workdir = exeName.substr(0, last_slash); + exeName = exeName.substr(last_slash + 1); + } - // TODO: check whether the bundled JRE is valid. - // First try the Java packaged together. - bool is64Bit = false; - GetArch(is64Bit); // if failed to determine architecture of operating system, consider 32-bit. + // TODO: check whether the bundled JRE is valid. + // First try the Java packaged together. + bool is64Bit = false; + GetArch(is64Bit); // if failed to determine architecture of operating system, + // consider 32-bit. - if (is64Bit) - { - RawLaunchJVM(L"jre-x64\\bin\\javaw.exe", workdir, exeName); - } - else - { - RawLaunchJVM(L"jre-x86\\bin\\javaw.exe", workdir, exeName); - } + if (is64Bit) { + RawLaunchJVM(L"jre-x64\\bin\\javaw.exe", workdir, exeName); + } else { + RawLaunchJVM(L"jre-x86\\bin\\javaw.exe", workdir, exeName); + } - if (FindJava(path)) - LaunchJVM(path + L"\\bin\\javaw.exe", workdir, exeName); + if (FindJava(path)) LaunchJVM(path + L"\\bin\\javaw.exe", workdir, exeName); - // Or we try to search Java in C:\Program Files. - { - WIN32_FIND_DATA data; - HANDLE hFind = FindFirstFile(L"C:\\Program Files\\Java\\*", &data); // Search all subdirectory + // Or we try to search Java in C:\Program Files. + { + WIN32_FIND_DATA data; + HANDLE hFind = FindFirstFile(L"C:\\Program Files\\Java\\*", + &data); // Search all subdirectory - if (hFind != INVALID_HANDLE_VALUE) { - do { - wstring javaw = wstring(L"C:\\Program Files\\Java\\") + data.cFileName + wstring(L"\\bin\\javaw.exe"); - if (FindFirstFileExists(javaw.c_str(), 0)) { - LaunchJVM(javaw, workdir, exeName); - } - } while (FindNextFile(hFind, &data)); - FindClose(hFind); - } - } + if (hFind != INVALID_HANDLE_VALUE) { + do { + std::wstring javaw = std::wstring(L"C:\\Program Files\\Java\\") + + data.cFileName + std::wstring(L"\\bin\\javaw.exe"); + if (FindFirstFileExists(javaw.c_str(), 0)) { + LaunchJVM(javaw, workdir, exeName); + } + } while (FindNextFile(hFind, &data)); + FindClose(hFind); + } + } - // Consider C:\Program Files (x86)\Java - { - WIN32_FIND_DATA data; - HANDLE hFind = FindFirstFile(L"C:\\Program Files (x86)\\Java\\*", &data); // Search all subdirectory + // Consider C:\Program Files (x86)\Java + { + WIN32_FIND_DATA data; + HANDLE hFind = FindFirstFile(L"C:\\Program Files (x86)\\Java\\*", + &data); // Search all subdirectory - if (hFind != INVALID_HANDLE_VALUE) { - do { - wstring javaw = wstring(L"C:\\Program Files (x86)\\Java\\") + data.cFileName + L"\\bin\\javaw.exe"; - if (FindFirstFileExists(javaw.c_str(), 0)) { - LaunchJVM(javaw, workdir, exeName); - } - } while (FindNextFile(hFind, &data)); - FindClose(hFind); - } - } + if (hFind != INVALID_HANDLE_VALUE) { + do { + std::wstring javaw = std::wstring(L"C:\\Program Files (x86)\\Java\\") + + data.cFileName + L"\\bin\\javaw.exe"; + if (FindFirstFileExists(javaw.c_str(), 0)) { + LaunchJVM(javaw, workdir, exeName); + } + } while (FindNextFile(hFind, &data)); + FindClose(hFind); + } + } - // Try java in PATH - RawLaunchJVM(L"javaw", workdir, exeName); + // Try java in PATH + RawLaunchJVM(L"javaw", workdir, exeName); - MessageBox(NULL, ERROR_PROMPT, L"Error", MB_ICONERROR | MB_OK); - ShellExecute(0, 0, L"https://java.com/", 0, 0, SW_SHOW); - return 1; + MessageBox(NULL, ERROR_PROMPT, L"Error", MB_ICONERROR | MB_OK); + ShellExecute(0, 0, L"https://java.com/", 0, 0, SW_SHOW); + return 1; } diff --git a/HMCLauncher/HMCL/os.cpp b/HMCLauncher/HMCL/os.cpp index 9b640e653..42be922a9 100644 --- a/HMCLauncher/HMCL/os.cpp +++ b/HMCLauncher/HMCL/os.cpp @@ -1,146 +1,128 @@ #include "stdafx.h" #include "os.h" -using namespace std; - -LSTATUS MyRegQueryValue(HKEY hKey, LPCWSTR subKey, DWORD dwType, wstring &out) -{ - DWORD dwSize = 0; - LSTATUS ret = RegQueryValueEx(hKey, subKey, 0, &dwType, NULL, &dwSize); - if (ret != ERROR_SUCCESS) return ret; - WCHAR *buffer = new WCHAR[dwSize]; - ret = RegQueryValueEx(hKey, subKey, 0, &dwType, (LPBYTE)buffer, &dwSize); - if (ret != ERROR_SUCCESS) return ret; - out = buffer; - delete[] buffer; - return ERROR_SUCCESS; +LSTATUS MyRegQueryValue(HKEY hKey, LPCWSTR subKey, DWORD dwType, + std::wstring &out) { + DWORD dwSize = 0; + LSTATUS ret = RegQueryValueEx(hKey, subKey, 0, &dwType, NULL, &dwSize); + if (ret != ERROR_SUCCESS) return ret; + WCHAR *buffer = new WCHAR[dwSize]; + ret = RegQueryValueEx(hKey, subKey, 0, &dwType, (LPBYTE)buffer, &dwSize); + if (ret != ERROR_SUCCESS) return ret; + out = buffer; + delete[] buffer; + return ERROR_SUCCESS; } -LSTATUS MyGetModuleFileName(HMODULE hModule, std::wstring &out) -{ - DWORD res, size = MAX_PATH; - out = wstring(); - out.resize(size); - while ((res = GetModuleFileName(hModule, &out[0], size)) == size) - { - out.resize(size += MAX_PATH); - } - if (res == 0) - return GetLastError(); - else - { - out.resize(size - MAX_PATH + res); - return ERROR_SUCCESS; - } +LSTATUS MyGetModuleFileName(HMODULE hModule, std::wstring &out) { + DWORD res, size = MAX_PATH; + out = std::wstring(); + out.resize(size); + while ((res = GetModuleFileName(hModule, &out[0], size)) == size) { + out.resize(size += MAX_PATH); + } + if (res == 0) + return GetLastError(); + else { + out.resize(size - MAX_PATH + res); + return ERROR_SUCCESS; + } } -LSTATUS MyGetEnvironmentVariable(LPCWSTR name, std::wstring & out) -{ - DWORD res, size = MAX_PATH; - out = wstring(); - out.resize(size); - while ((res = GetEnvironmentVariable(name, &out[0], size)) == size) - { - out.resize(size += MAX_PATH); - } - if (res == 0) - return GetLastError(); - else - { - out.resize(size - MAX_PATH + res); - return ERROR_SUCCESS; - } +LSTATUS MyGetEnvironmentVariable(LPCWSTR name, std::wstring &out) { + DWORD res, size = MAX_PATH; + out = std::wstring(); + out.resize(size); + while ((res = GetEnvironmentVariable(name, &out[0], size)) == size) { + out.resize(size += MAX_PATH); + } + if (res == 0) + return GetLastError(); + else { + out.resize(size - MAX_PATH + res); + return ERROR_SUCCESS; + } } -bool MyCreateProcess(const std::wstring &command, const std::wstring &workdir) -{ - wstring writable_command = command; - STARTUPINFO si; - PROCESS_INFORMATION pi; - si.cb = sizeof(si); - ZeroMemory(&si, sizeof(si)); - ZeroMemory(&pi, sizeof(pi)); +bool MyCreateProcess(const std::wstring &command, const std::wstring &workdir) { + std::wstring writable_command = command; + STARTUPINFO si; + PROCESS_INFORMATION pi; + si.cb = sizeof(si); + ZeroMemory(&si, sizeof(si)); + ZeroMemory(&pi, sizeof(pi)); - if (workdir.empty()) { - return CreateProcess(NULL, &writable_command[0], NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); - } - else { - return CreateProcess(NULL, &writable_command[0], NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, workdir.c_str(), &si, &pi); - } + if (workdir.empty()) { + return CreateProcess(NULL, &writable_command[0], NULL, NULL, false, + NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); + } else { + return CreateProcess(NULL, &writable_command[0], NULL, NULL, false, + NORMAL_PRIORITY_CLASS, NULL, workdir.c_str(), &si, + &pi); + } } -bool FindFirstFileExists(LPCWSTR lpPath, DWORD dwFilter) -{ - WIN32_FIND_DATA fd; - HANDLE hFind = FindFirstFile(lpPath, &fd); - bool bFilter = (false == dwFilter) ? true : fd.dwFileAttributes & dwFilter; - bool ret = ((hFind != INVALID_HANDLE_VALUE) && bFilter) ? true : false; - FindClose(hFind); - return ret; +bool FindFirstFileExists(LPCWSTR lpPath, DWORD dwFilter) { + WIN32_FIND_DATA fd; + HANDLE hFind = FindFirstFile(lpPath, &fd); + bool bFilter = (false == dwFilter) ? true : fd.dwFileAttributes & dwFilter; + bool ret = ((hFind != INVALID_HANDLE_VALUE) && bFilter) ? true : false; + FindClose(hFind); + return ret; } -bool GetArch(bool & is64Bit) -{ +bool GetArch(bool &is64Bit) { #if _WIN64 - is64Bit = true; - return true; + is64Bit = true; + return true; #elif _WIN32 - typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); + typedef BOOL(WINAPI * LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); - BOOL isWow64 = FALSE; + BOOL isWow64 = FALSE; - // IsWow64Process is not available on all supported versions of Windows. - // Use GetModuleHandle to get a handle to the DLL that contains the function - // and GetProcAddress to get a pointer to the function if available. + // IsWow64Process is not available on all supported versions of Windows. + // Use GetModuleHandle to get a handle to the DLL that contains the function + // and GetProcAddress to get a pointer to the function if available. - LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) - GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process"); + LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( + GetModuleHandle(TEXT("kernel32")), "IsWow64Process"); - if (fnIsWow64Process) - { - if (!fnIsWow64Process(GetCurrentProcess(), &isWow64)) - return false; + if (fnIsWow64Process) { + if (!fnIsWow64Process(GetCurrentProcess(), &isWow64)) return false; - is64Bit = isWow64; - return true; - } - else // IsWow64Process is not supported, fail to detect. - return false; + is64Bit = isWow64; + return true; + } else // IsWow64Process is not supported, fail to detect. + return false; #else #error _WIN64 and _WIN32 are both undefined. #endif } -bool MyGetFileVersionInfo(const std::wstring & filePath, Version &version) -{ - DWORD verHandle = 0; - UINT size = 0; - LPBYTE lpBuffer = NULL; - VS_FIXEDFILEINFO *pFileInfo; - DWORD dwSize = GetFileVersionInfoSize(filePath.c_str(), NULL); +bool MyGetFileVersionInfo(const std::wstring &filePath, Version &version) { + DWORD verHandle = 0; + UINT size = 0; + LPBYTE lpBuffer = NULL; + VS_FIXEDFILEINFO *pFileInfo; + DWORD dwSize = GetFileVersionInfoSize(filePath.c_str(), NULL); - if (!dwSize) - return false; + if (!dwSize) return false; - LPBYTE data = new BYTE[dwSize]; - if (!GetFileVersionInfo(filePath.c_str(), 0, dwSize, data)) - { - delete[] data; - return false; - } + LPBYTE data = new BYTE[dwSize]; + if (!GetFileVersionInfo(filePath.c_str(), 0, dwSize, data)) { + delete[] data; + return false; + } - if (!VerQueryValue(data, TEXT("\\"), (LPVOID*)&pFileInfo, &size)) - { - delete[] data; - return false; - } + if (!VerQueryValue(data, TEXT("\\"), (LPVOID *)&pFileInfo, &size)) { + delete[] data; + return false; + } - version = Version{ - (pFileInfo->dwFileVersionMS >> 16) & 0xFFFF, - (pFileInfo->dwFileVersionMS >> 0) & 0xFFFF, - (pFileInfo->dwFileVersionLS >> 16) & 0xFFFF, - (pFileInfo->dwFileVersionLS >> 0) & 0xFFFF - }; - return true; + version = Version{(pFileInfo->dwFileVersionMS >> 16) & 0xFFFF, + (pFileInfo->dwFileVersionMS >> 0) & 0xFFFF, + (pFileInfo->dwFileVersionLS >> 16) & 0xFFFF, + (pFileInfo->dwFileVersionLS >> 0) & 0xFFFF}; + return true; } diff --git a/HMCLauncher/HMCL/os.h b/HMCLauncher/HMCL/os.h index ab2f69ff8..9a985758f 100644 --- a/HMCLauncher/HMCL/os.h +++ b/HMCLauncher/HMCL/os.h @@ -6,17 +6,20 @@ const int MAX_KEY_LENGTH = 255; const int MAX_VALUE_NAME = 16383; -// Query registry value of class root hKey, key path subKey, stores result in parameter out. -LSTATUS MyRegQueryValue(HKEY hKey, LPCWSTR subKey, DWORD dwType, std::wstring &out); +// Query registry value of class root hKey, key path subKey, stores result in +// parameter out. +LSTATUS MyRegQueryValue(HKEY hKey, LPCWSTR subKey, DWORD dwType, + std::wstring &out); // Get module file name, stores result in parameter out. LSTATUS MyGetModuleFileName(HMODULE hModule, std::wstring &out); -// Get environment variable by name, C++ style, stores the value in parameter out. +// Get environment variable by name, C++ style, stores the value in parameter +// out. LSTATUS MyGetEnvironmentVariable(LPCWSTR name, std::wstring &out); // Create process by invoking CreateProcess, only pass command. -bool MyCreateProcess(const std::wstring &command, const std::wstring& workdir); +bool MyCreateProcess(const std::wstring &command, const std::wstring &workdir); // Check if file lpPath exists. bool FindFirstFileExists(LPCWSTR lpPath, DWORD dwFilter);