From 35d0cc5104d5ae6e86d626ffe76e52a05edb6e9c Mon Sep 17 00:00:00 2001 From: Jaime Bernardo Date: Wed, 13 Jul 2022 11:53:47 +0100 Subject: [PATCH] [Tool]Exhaustively check every monitor in the Monitor Report Tool (#19384) * Check full EnumDisplayDevicesW entries * refactor code a bit * Fix spellcheck * Remove unneeded var --- .github/actions/spell-check/expect.txt | 1 + tools/MonitorReportTool/MonitorReportTool.cpp | 66 ++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 262d2152b69..21df41882b5 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -1239,6 +1239,7 @@ mmsystem mockapi MODECHANGE modernwpf +MODESPRUNED Moldova Mongala MONITORINFO diff --git a/tools/MonitorReportTool/MonitorReportTool.cpp b/tools/MonitorReportTool/MonitorReportTool.cpp index 65981736792..747ea91e1a8 100644 --- a/tools/MonitorReportTool/MonitorReportTool.cpp +++ b/tools/MonitorReportTool/MonitorReportTool.cpp @@ -37,7 +37,7 @@ namespace FancyZonesUtils void LogEnumDisplayMonitors() { - Logger::log(L" ---- EnumDisplayMonitors ---- "); + Logger::log(L" ---- EnumDisplayMonitors as in FancyZones ---- "); auto allMonitors = FancyZonesUtils::GetAllMonitorInfo<&MONITORINFOEX::rcWork>(); std::unordered_map displayDeviceIdxMap; @@ -67,6 +67,69 @@ void LogEnumDisplayMonitors() Logger::log(L""); } +void LogPrintDisplayDevice(const DISPLAY_DEVICE& displayDevice, bool internal) +{ + const bool active = displayDevice.StateFlags & DISPLAY_DEVICE_ACTIVE; + const bool mirroring = displayDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER; + const bool modesPruned = displayDevice.StateFlags & DISPLAY_DEVICE_MODESPRUNED; + const bool primaryDevice = displayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE; + const bool removable = displayDevice.StateFlags & DISPLAY_DEVICE_REMOVABLE; + const bool VGA_Compatible = displayDevice.StateFlags & DISPLAY_DEVICE_VGA_COMPATIBLE; + + Logger::log(L"{}DeviceId: {}", internal?L"--> ":L"", std::wstring(displayDevice.DeviceID)); + Logger::log(L"{}DeviceKey: {}", internal?L"--> ":L"", std::wstring(displayDevice.DeviceKey)); + Logger::log(L"{}DeviceName: {}", internal?L"--> ":L"", std::wstring(displayDevice.DeviceName)); + Logger::log(L"{}DeviceString: {}", internal?L"--> ":L"", std::wstring(displayDevice.DeviceString)); + Logger::log(L"{}StateFlags: {}", internal?L"--> ":L"", displayDevice.StateFlags); + Logger::log(L"{}active: {}", internal?L"--> ":L"", active); + Logger::log(L"{}mirroring: {}", internal?L"--> ":L"", mirroring); + Logger::log(L"{}modesPruned: {}", internal?L"--> ":L"", modesPruned); + Logger::log(L"{}primaryDevice: {}", internal?L"--> ":L"", primaryDevice); + Logger::log(L"{}removable: {}", internal?L"--> ":L"", removable); + Logger::log(L"{}VGA_Compatible: {}", internal?L"--> ":L"", VGA_Compatible); + Logger::log(L""); +} + +void LogExhaustiveDisplayDevices(bool use_EDD_GET_DEVICE_INTERFACE_NAME) +{ + Logger::log(L" ---- Exhaustive EnumDisplayDevicesW {} EDD_GET_DEVICE_INTERFACE_NAME ---- ", use_EDD_GET_DEVICE_INTERFACE_NAME?L"with":L"without"); + DISPLAY_DEVICE displayDevice{ .cb = sizeof(DISPLAY_DEVICE) }; + DWORD deviceIdx = 0; + while (EnumDisplayDevicesW(nullptr, deviceIdx, &displayDevice, EDD_GET_DEVICE_INTERFACE_NAME)) + { + LogPrintDisplayDevice(displayDevice, false); + DISPLAY_DEVICE displayDeviceInternal{ .cb = sizeof(DISPLAY_DEVICE) }; + DWORD deviceIdxInternal = 0; + while (EnumDisplayDevicesW(displayDevice.DeviceName, deviceIdxInternal, &displayDeviceInternal, EDD_GET_DEVICE_INTERFACE_NAME)) { + Logger::log(L"Inside {} there's:", displayDevice.DeviceName); + LogPrintDisplayDevice(displayDeviceInternal, true); + deviceIdxInternal++; + } + deviceIdx++; + } +} + +void LogEnumDisplayMonitorsProper() +{ + + auto allMonitors = FancyZonesUtils::GetAllMonitorInfo<&MONITORINFOEX::rcWork>(); + + Logger::log(L" ---- FancyZonesUtils::GetAllMonitorInfo ---- "); + for (auto& monitorData : allMonitors) + { + auto monitorInfo = monitorData.second; + Logger::log(L"szDevice: {}", std::wstring(monitorInfo.szDevice)); + Logger::log(L"cbSize: {}", monitorInfo.cbSize); + Logger::log(L"dwFlags: {}", monitorInfo.dwFlags); + Logger::log(L""); + } + + LogExhaustiveDisplayDevices(true); + LogExhaustiveDisplayDevices(false); + + Logger::log(L""); +} + void LogWMIProp(IWbemClassObject* wbemClassObj, std::wstring_view prop) { if (!wbemClassObj) @@ -453,6 +516,7 @@ void LogInfo() Logger::log(L""); LogEnumDisplayMonitors(); + LogEnumDisplayMonitorsProper(); LogWMICIMV2(); LogWMI(); LogCCD();