[FancyZones] Screen enumeration improvement (#6908)

* Improvements in enumeration of available screens (work areas)

* Minor code style improvement

* Address PR comments

* Store map of display device name to device index

* Address PR comments

* Update comment

* Break when suitable device is found
This commit is contained in:
vldmr11080
2020-10-13 17:22:25 +02:00
committed by GitHub
parent dde19380e9
commit 954705e3a0
7 changed files with 85 additions and 77 deletions

View File

@@ -27,24 +27,26 @@ using namespace FancyZonesUtils;
namespace ZoneWindowUtils
{
std::wstring GenerateUniqueId(HMONITOR monitor, PCWSTR deviceId, PCWSTR virtualDesktopId)
std::wstring GenerateUniqueId(HMONITOR monitor, const std::wstring& deviceId, const std::wstring& virtualDesktopId)
{
wchar_t uniqueId[256]{}; // Parsed deviceId + resolution + virtualDesktopId
MONITORINFOEXW mi;
mi.cbSize = sizeof(mi);
if (virtualDesktopId && GetMonitorInfo(monitor, &mi))
if (!virtualDesktopId.empty() && GetMonitorInfo(monitor, &mi))
{
wchar_t parsedId[256]{};
ParseDeviceId(deviceId, parsedId, 256);
Rect const monitorRect(mi.rcMonitor);
StringCchPrintf(uniqueId, ARRAYSIZE(uniqueId), L"%s_%d_%d_%s", parsedId, monitorRect.width(), monitorRect.height(), virtualDesktopId);
// Unique identifier format: <parsed-device-id>_<width>_<height>_<virtual-desktop-id>
return ParseDeviceId(deviceId) +
L'_' +
std::to_wstring(monitorRect.width()) +
L'_' +
std::to_wstring(monitorRect.height()) +
L'_' +
virtualDesktopId;
}
return std::wstring{ uniqueId };
return {};
}
std::wstring GenerateUniqueIdAllMonitorsArea(PCWSTR virtualDesktopId)
std::wstring GenerateUniqueIdAllMonitorsArea(const std::wstring& virtualDesktopId)
{
std::wstring result{ ZonedWindowProperties::MultiMonitorDeviceID };