private static List <QueryMonitorInfo> GetQueryDisplayMonitorInfo() { List <QueryMonitorInfo> monitors = new List <QueryMonitorInfo>(); int error = GetDisplayConfigBufferSizes(QUERY_DEVICE_CONFIG_FLAGS.QDC_ONLY_ACTIVE_PATHS, out uint pathCount, out uint modeCount); if (error != ERROR_SUCCESS) { throw new Win32Exception(error); } DISPLAYCONFIG_PATH_INFO[] displayPaths = new DISPLAYCONFIG_PATH_INFO[pathCount]; DISPLAYCONFIG_MODE_INFO[] displayModes = new DISPLAYCONFIG_MODE_INFO[modeCount]; error = QueryDisplayConfig(QUERY_DEVICE_CONFIG_FLAGS.QDC_ONLY_ACTIVE_PATHS, ref pathCount, displayPaths, ref modeCount, displayModes, IntPtr.Zero); if (error != ERROR_SUCCESS) { throw new Win32Exception(error); } Logger.Instance.LogMessage(TracingLevel.INFO, $"QueryDisplay returned {pathCount} paths and {modeCount} modes"); QueryMonitorInfo currMonitor = new QueryMonitorInfo(); for (int idx = 0; idx < modeCount; idx++) { if (idx % 2 == 0) { currMonitor = new QueryMonitorInfo { AdapterId = displayModes[idx].adapterId, Id = displayModes[idx].id }; } else { if (currMonitor.AdapterId.HighPart != displayModes[idx].adapterId.HighPart || currMonitor.AdapterId.LowPart != displayModes[idx].adapterId.LowPart) { throw new Exception("Inconsistent Adapter Id"); } } if (displayModes[idx].infoType == DISPLAYCONFIG_MODE_INFO_TYPE.DISPLAYCONFIG_MODE_INFO_TYPE_TARGET) { currMonitor.UserFriendlyName = MonitorFriendlyName(displayModes[idx].adapterId, displayModes[idx].id); currMonitor.DevicePath = MonitorDevicePath(displayModes[idx].adapterId, displayModes[idx].id); } else if (displayModes[idx].infoType == DISPLAYCONFIG_MODE_INFO_TYPE.DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE) { currMonitor.DisplayName = GDI(displayModes[idx].adapterId, displayModes[idx].id); } if (idx % 2 != 0) { monitors.Add(currMonitor); } } Logger.Instance.LogMessage(TracingLevel.INFO, $"QueryDisplay returned {monitors.Count} monitors"); return(monitors); }
public MonitorInfo(WMIMonitorInfo wmiInfo, QueryMonitorInfo queryInfo) { WMIInfo = wmiInfo; QueryInfo = queryInfo; if (WMIInfo != null && QueryInfo != null) { UniqueValue = $"{WMIInfo?.UserFriendlyName}{Constants.UNIQUE_VALUE_DELIMITER}{WMIInfo?.SerialNumber}{Constants.UNIQUE_VALUE_DELIMITER}{WMIInfo.InstanceName}"; DeviceName = QueryInfo?.DisplayName; FriendlyName = WMIInfo?.UserFriendlyName; DisplayName = FriendlyName; } }