diff --git a/src/main.cpp b/src/main.cpp index 33940416..510fda16 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -73,6 +73,60 @@ namespace big } return patched; } + + std::string ReadRegistryKeySZ(HKEY hKeyParent, std::string subkey, std::string valueName) + { + HKEY hKey; + char value[1024]; + DWORD value_length = 1024; + LONG ret = RegOpenKeyEx(hKeyParent, subkey.c_str(), 0, KEY_READ, &hKey); + if (ret != ERROR_SUCCESS) + { + LOG(INFO) << "Unable to read registry key " << subkey; + return ""; + } + ret = RegQueryValueEx(hKey, valueName.c_str(), NULL, NULL, (LPBYTE)&value, &value_length); + RegCloseKey(hKey); + if (ret != ERROR_SUCCESS) + { + LOG(INFO) << "Unable to read registry key " << valueName; + return ""; + } + return std::string(value); + } + + DWORD ReadRegistryKeyDWORD(HKEY hKeyParent, std::string subkey, std::string valueName) + { + HKEY hKey; + DWORD value; + DWORD value_length = sizeof(DWORD); + LONG ret = RegOpenKeyEx(hKeyParent, subkey.c_str(), 0, KEY_READ, &hKey); + if (ret != ERROR_SUCCESS) + { + LOG(INFO) << "Unable to read registry key " << subkey; + return NULL; + } + ret = RegQueryValueEx(hKey, valueName.c_str(), NULL, NULL, (LPBYTE)&value, &value_length); + RegCloseKey(hKey); + if (ret != ERROR_SUCCESS) + { + LOG(INFO) << "Unable to read registry key " << valueName; + return NULL; + } + return value; + } + + LPSTR GetWindowsVersion() + { + typedef LPWSTR(WINAPI * BFS)(LPCWSTR); + LPWSTR UTF16 = BFS(GetProcAddress(LoadLibrary("winbrand.dll"), "BrandingFormatString"))(L"%WINDOWS_LONG%"); + int BufferSize = WideCharToMultiByte(CP_UTF8, 0, UTF16, -1, NULL, 0, NULL, NULL); + LPSTR UTF8 = new char[BufferSize]; + WideCharToMultiByte(CP_UTF8, 0, UTF16, -1, UTF8, BufferSize, NULL, NULL); + // BrandingFormatString requires a GlobalFree. + GlobalFree(UTF16); + return UTF8; + } } BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID) @@ -104,6 +158,11 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID) LOG(INFO) << "Yim's Menu Initializing"; LOGF(INFO, "Git Info\n\tBranch:\t{}\n\tHash:\t{}\n\tDate:\t{}", version::GIT_BRANCH, version::GIT_SHA1, version::GIT_DATE); + auto display_version = ReadRegistryKeySZ(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "DisplayVersion"); + auto current_build = ReadRegistryKeySZ(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "CurrentBuild"); + auto UBR = ReadRegistryKeyDWORD(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "UBR"); + LOG(INFO) << GetWindowsVersion() << " Version " << display_version << " (OS Build " << current_build << "." << UBR << ")"; + #ifndef NDEBUG LOG(WARNING) << "Debug Build. Switch to RelWithDebInfo or Release Build for a more stable experience"; #endif diff --git a/src/renderer.cpp b/src/renderer.cpp index 272c19e2..4d314750 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -39,6 +39,11 @@ namespace big file font_file_path = windows_fonts.get_file("./msyh.ttc"); if (!font_file_path.exists()) font_file_path = windows_fonts.get_file("./msyh.ttf"); + if (!font_file_path.exists()) + { + LOG(WARNING) << "Failed to find msyh font, falling back to Arial!"; + font_file_path = windows_fonts.get_file("./arial.ttf"); + } auto font_file = std::ifstream(font_file_path.get_path(), std::ios::binary | std::ios::ate); const auto font_data_size = static_cast(font_file.tellg()); const auto font_data = std::make_unique(font_data_size);