[FancyZones]Monitor identification (#19077)

* moved monitors identifying

* changed device id

* get wmi info

* convert old data

* save/load applied layouts

* changed monitor identification

* id comparison

* save/load app zone history

* moved com and security init

* update ids in editor

* lib fix

* updated tests

* changed comparison

* tests

* updated id comparison

* updated log

* moved definition

* spell check

* resolve conflicts

* refactoring

* update serial numbers if possible
This commit is contained in:
Seraphima Zykova
2022-07-01 17:29:02 +02:00
committed by GitHub
parent 3cb0638c7e
commit 35bb4280d0
30 changed files with 1084 additions and 408 deletions

View File

@@ -13,6 +13,10 @@ namespace FancyZonesEditor.Utils
{
public string MonitorName { get; set; }
public string MonitorInstanceId { get; set; }
public string MonitorSerialNumber { get; set; }
public Size MonitorSize { get; set; }
public string VirtualDesktopId { get; set; }
@@ -23,9 +27,11 @@ namespace FancyZonesEditor.Utils
public int Dpi { get; set; }
public Device(string monitorName, string virtualDesktopId, int dpi, Rect workArea, Size monitorSize)
public Device(string monitorName, string monitorInstanceId, string monitorSerialNumber, string virtualDesktopId, int dpi, Rect workArea, Size monitorSize)
{
MonitorName = monitorName;
MonitorInstanceId = monitorInstanceId;
MonitorSerialNumber = monitorSerialNumber;
VirtualDesktopId = virtualDesktopId;
Dpi = dpi;
WorkAreaRect = workArea;
@@ -48,6 +54,8 @@ namespace FancyZonesEditor.Utils
var sb = new StringBuilder();
sb.AppendFormat(CultureInfo.InvariantCulture, "MonitorName: {0}{1}", MonitorName, Environment.NewLine);
sb.AppendFormat(CultureInfo.InvariantCulture, "Monitor InstanceId {0}{1}", MonitorInstanceId, Environment.NewLine);
sb.AppendFormat(CultureInfo.InvariantCulture, "Monitor Serial Number {0}{1}", MonitorSerialNumber, Environment.NewLine);
sb.AppendFormat(CultureInfo.InvariantCulture, "Virtual desktop: {0}{1}", VirtualDesktopId, Environment.NewLine);
sb.AppendFormat(CultureInfo.InvariantCulture, "DPI: {0}{1}", Dpi, Environment.NewLine);

View File

@@ -41,10 +41,10 @@ namespace FancyZonesEditor.Models
Window.Height = workArea.Height;
}
public Monitor(string monitorName, string virtualDesktop, int dpi, Rect workArea, Size monitorSize)
public Monitor(string monitorName, string monitorInstanceId, string monitorSerialNumber, string virtualDesktop, int dpi, Rect workArea, Size monitorSize)
: this(workArea, monitorSize)
{
Device = new Device(monitorName, virtualDesktop, dpi, workArea, monitorSize);
Device = new Device(monitorName, monitorInstanceId, monitorSerialNumber, virtualDesktop, dpi, workArea, monitorSize);
}
public void Scale(double scaleFactor)

View File

@@ -77,6 +77,10 @@ namespace FancyZonesEditor.Utils
{
public string Monitor { get; set; }
public string MonitorInstanceId { get; set; }
public string MonitorSerialNumber { get; set; }
public string VirtualDesktop { get; set; }
public int Dpi { get; set; }
@@ -128,6 +132,10 @@ namespace FancyZonesEditor.Utils
{
public string Monitor { get; set; }
public string MonitorInstance { get; set; }
public string SerialNumber { get; set; }
public string VirtualDesktop { get; set; }
}
@@ -309,6 +317,7 @@ namespace FancyZonesEditor.Utils
if (!App.Overlay.SpanZonesAcrossMonitors)
{
string targetMonitorId = string.Empty;
string targetMonitorSerialNumber = string.Empty;
string targetVirtualDesktop = string.Empty;
foreach (NativeMonitorData nativeData in editorParams.Monitors)
@@ -317,6 +326,7 @@ namespace FancyZonesEditor.Utils
if (nativeData.IsSelected)
{
targetMonitorId = nativeData.Monitor;
targetMonitorSerialNumber = nativeData.MonitorSerialNumber;
targetVirtualDesktop = nativeData.VirtualDesktop;
}
@@ -324,6 +334,8 @@ namespace FancyZonesEditor.Utils
var monitor = new Monitor(workArea, monitorSize);
monitor.Device.MonitorName = nativeData.Monitor;
monitor.Device.MonitorInstanceId = nativeData.MonitorInstanceId;
monitor.Device.MonitorSerialNumber = nativeData.MonitorSerialNumber;
monitor.Device.VirtualDesktopId = nativeData.VirtualDesktop;
monitor.Device.Dpi = nativeData.Dpi;
@@ -335,7 +347,9 @@ namespace FancyZonesEditor.Utils
for (int i = 0; i < monitors.Count; i++)
{
var monitor = monitors[i];
if (monitor.Device.MonitorName == targetMonitorId && monitor.Device.VirtualDesktopId == targetVirtualDesktop)
if (monitor.Device.MonitorName == targetMonitorId &&
monitor.Device.MonitorSerialNumber == targetMonitorSerialNumber &&
monitor.Device.VirtualDesktopId == targetVirtualDesktop)
{
App.Overlay.CurrentDesktop = i;
break;
@@ -554,6 +568,8 @@ namespace FancyZonesEditor.Utils
Device = new AppliedLayoutWrapper.DeviceIdWrapper
{
Monitor = monitor.Device.MonitorName,
MonitorInstance = monitor.Device.MonitorInstanceId,
SerialNumber = monitor.Device.MonitorSerialNumber,
VirtualDesktop = monitor.Device.VirtualDesktopId,
},
@@ -818,7 +834,10 @@ namespace FancyZonesEditor.Utils
bool unused = true;
foreach (Monitor monitor in monitors)
{
if (monitor.Device.MonitorName == layout.Device.Monitor && (monitor.Device.VirtualDesktopId == layout.Device.VirtualDesktop || layout.Device.VirtualDesktop == DefaultVirtualDesktopGuid))
if (monitor.Device.MonitorName == layout.Device.Monitor &&
monitor.Device.MonitorSerialNumber == layout.Device.SerialNumber &&
(monitor.Device.VirtualDesktopId == layout.Device.VirtualDesktop ||
layout.Device.VirtualDesktop == DefaultVirtualDesktopGuid))
{
var settings = new LayoutSettings
{