[FancyZones] Retry monitor identification attempt (#27005)

* retry monitor identification

* check displays after retries

* reduce waiting time

* 30ms waiting time

* keep fallback values
This commit is contained in:
Seraphima Zykova
2023-06-23 22:02:36 +02:00
committed by GitHub
parent 9511d17063
commit 8dcdcbaa37
2 changed files with 24 additions and 11 deletions

View File

@@ -219,11 +219,12 @@ namespace MonitorUtils
return result;
}
std::vector<FancyZonesDataTypes::MonitorId> GetDisplays()
std::pair<bool, std::vector<FancyZonesDataTypes::MonitorId>> GetDisplays()
{
auto allMonitors = FancyZonesUtils::GetAllMonitorInfo<&MONITORINFOEX::rcWork>();
bool success = true;
std::vector<FancyZonesDataTypes::MonitorId> result{};
auto allMonitors = FancyZonesUtils::GetAllMonitorInfo<&MONITORINFOEX::rcWork>();
for (auto& monitorData : allMonitors)
{
auto monitorInfo = monitorData.second;
@@ -269,10 +270,12 @@ namespace MonitorUtils
}
else
{
// Use the display name when no proper device was found.
success = false;
// Use the display name as a fallback value when no proper device was found.
monitorId.deviceId.id = monitorInfo.szDevice;
monitorId.deviceId.instanceId = L"";
Logger::info(L"No active monitor found for {} : {}", monitorInfo.szDevice, get_last_error_or_default(GetLastError()));
try
{
std::wstring numberStr = monitorInfo.szDevice; // \\.\DISPLAY1
@@ -289,7 +292,7 @@ namespace MonitorUtils
result.push_back(std::move(monitorId));
}
return result;
return {success, result};
}
}
@@ -367,12 +370,22 @@ namespace MonitorUtils
{
Logger::info(L"Identifying monitors");
auto displays = Display::GetDisplays();
auto displaysResult = Display::GetDisplays();
auto monitors = WMI::GetHardwareMonitorIds();
// retry
int retryCounter = 0;
while (!displaysResult.first && retryCounter < 100)
{
Logger::info("Retry display identification");
std::this_thread::sleep_for(std::chrono::milliseconds(30));
displaysResult = Display::GetDisplays();
retryCounter++;
}
for (const auto& monitor : monitors)
{
for (auto& display : displays)
for (auto& display : displaysResult.second)
{
if (monitor.deviceId.id == display.deviceId.id)
{
@@ -381,7 +394,7 @@ namespace MonitorUtils
}
}
return displays;
return displaysResult.second;
}
FancyZonesUtils::Rect GetWorkAreaRect(HMONITOR monitor)

View File

@@ -7,7 +7,7 @@ namespace MonitorUtils
{
namespace Display
{
std::vector<FancyZonesDataTypes::MonitorId> GetDisplays();
std::pair<bool, std::vector<FancyZonesDataTypes::MonitorId>> GetDisplays();
FancyZonesDataTypes::DeviceId SplitDisplayDeviceId(const std::wstring& str) noexcept;
FancyZonesDataTypes::DeviceId ConvertObsoleteDeviceId(const std::wstring& str) noexcept;
}