diff --git a/idd/LGIddHelper/CRegistrySettings.cpp b/idd/LGIddHelper/CRegistrySettings.cpp index 54f7c4ed..5580698b 100644 --- a/idd/LGIddHelper/CRegistrySettings.cpp +++ b/idd/LGIddHelper/CRegistrySettings.cpp @@ -220,98 +220,65 @@ LSTATUS CRegistrySettings::setDefaultRefresh(DWORD refresh100uHz) (DWORD)((value.size() + 1) * sizeof(wchar_t))); } -std::optional CRegistrySettings::getNoGPU() +std::optional CRegistrySettings::readBooleanSetting(LPCWSTR szName, bool fallback) { DWORD result, cbData = sizeof result; - LSTATUS status = RegGetValue(hKey, nullptr, L"NoGPU", RRF_RT_REG_DWORD, nullptr, &result, &cbData); + LSTATUS status = RegGetValue(hKey, nullptr, szName, RRF_RT_REG_DWORD, nullptr, &result, &cbData); switch (status) { case ERROR_SUCCESS: return !!result; case ERROR_FILE_NOT_FOUND: - return false; + return fallback; default: - DEBUG_ERROR_HR(status, "RegGetValue(NoGPU)"); + DEBUG_ERROR_HR(status, "RegGetValue(%S)", szName); return {}; } } +LSTATUS CRegistrySettings::writeBooleanSetting(LPCWSTR szName, bool value) +{ + DWORD dwValue = value; + return RegSetValueEx(hKey, szName, 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD)); +} + +std::optional CRegistrySettings::getNoGPU() +{ + return readBooleanSetting(L"NoGPU"); +} + LSTATUS CRegistrySettings::setNoGPU(bool noGPU) { - DWORD dwValue = noGPU; - return RegSetValueEx(hKey, L"NoGPU", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD)); + return writeBooleanSetting(L"NoGPU", noGPU); } std::optional CRegistrySettings::getExclusiveMonitor() { - DWORD result, cbData = sizeof result; - - LSTATUS status = RegGetValue(hKey, nullptr, L"ExclusiveMonitor", RRF_RT_REG_DWORD, nullptr, &result, &cbData); - switch (status) - { - case ERROR_SUCCESS: - return !!result; - case ERROR_FILE_NOT_FOUND: - return true; - default: - DEBUG_ERROR_HR(status, "RegGetValue(ExclusiveMonitor)"); - return {}; - } + return readBooleanSetting(L"ExclusiveMonitor", true); } LSTATUS CRegistrySettings::setExclusiveMonitor(bool exclusive) { - DWORD dwValue = exclusive; - return RegSetValueEx(hKey, L"ExclusiveMonitor", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD)); + return writeBooleanSetting(L"ExclusiveMonitor", exclusive); } std::optional CRegistrySettings::getForceFullDirectCopy() { - DWORD result, cbData = sizeof result; - - LSTATUS status = RegGetValue(hKey, nullptr, L"ForceFullDirectCopy", - RRF_RT_REG_DWORD, nullptr, &result, &cbData); - switch (status) - { - case ERROR_SUCCESS: - return !!result; - case ERROR_FILE_NOT_FOUND: - return false; - default: - DEBUG_ERROR_HR(status, "RegGetValue(ForceFullDirectCopy)"); - return {}; - } + return readBooleanSetting(L"ForceFullDirectCopy"); } LSTATUS CRegistrySettings::setForceFullDirectCopy(bool forceFullCopy) { - DWORD dwValue = forceFullCopy; - return RegSetValueEx(hKey, L"ForceFullDirectCopy", 0, REG_DWORD, - (LPBYTE)&dwValue, sizeof(DWORD)); + return writeBooleanSetting(L"ForceFullDirectCopy", forceFullCopy); } std::optional CRegistrySettings::getForceIndirectCopy() { - DWORD result, cbData = sizeof result; - - LSTATUS status = RegGetValue(hKey, nullptr, L"ForceIndirectCopy", - RRF_RT_REG_DWORD, nullptr, &result, &cbData); - switch (status) - { - case ERROR_SUCCESS: - return !!result; - case ERROR_FILE_NOT_FOUND: - return false; - default: - DEBUG_ERROR_HR(status, "RegGetValue(ForceIndirectCopy)"); - return {}; - } + return readBooleanSetting(L"ForceIndirectCopy"); } LSTATUS CRegistrySettings::setForceIndirectCopy(bool forceIndirectCopy) { - DWORD dwValue = forceIndirectCopy; - return RegSetValueEx(hKey, L"ForceIndirectCopy", 0, REG_DWORD, - (LPBYTE)&dwValue, sizeof(DWORD)); + return writeBooleanSetting(L"ForceIndirectCopy", forceIndirectCopy); } diff --git a/idd/LGIddHelper/CRegistrySettings.h b/idd/LGIddHelper/CRegistrySettings.h index b66d5b1b..795bcfd0 100644 --- a/idd/LGIddHelper/CRegistrySettings.h +++ b/idd/LGIddHelper/CRegistrySettings.h @@ -37,6 +37,9 @@ struct DisplayMode { class CRegistrySettings { HKEY hKey; + std::optional readBooleanSetting(LPCWSTR szName, bool fallback = false); + LSTATUS writeBooleanSetting(LPCWSTR szName, bool value); + public: CRegistrySettings(); ~CRegistrySettings();